Преобразование строковой даты в datetime в Oracle

#sql #oracle #ora-01861

#sql #Oracle #ora-01861

Вопрос:

Как я могу преобразовать эту строковую дату в datetime в oracle.

 2011-07-28T23:54:14Z
 

Использование этого кода выдает ошибку:

 TO_DATE('2011-07-28T23:54:14Z',  'YYYY-MM-DD HH24:MI:SS')
 

Как это можно сделать?

 Error report:
SQL Error: ORA-01861: literal does not match format string
01861. 00000 -  "literal does not match format string"
*Cause:    Literals in the input must be the same length as literals in
           the format string (with the exception of leading whitespace).  If the
           "FX" modifier has been toggled on, the literal must match exactly,
           with no extra whitespace.
*Action:   Correct the format string to match the literal.
 

Обновить:-

TO_DATE(‘2011-07-28T23:54:14Z’, ‘ГГГГ-ММ-ДД «Т»ЧЧ24: MI: SS «Z»‘)

Я вижу только дату, а не время в столбце

 28-JUL-11
 

Комментарии:

1. В вашем формате нет букв T и Z, или я ошибаюсь? Попробуйте проанализировать 2011-07-28 23:54:14, если это пройдет, затем используйте регулярное выражение для нормализации ваших входных строк.

2. @p.campbell но в моем случае. Строковая дата находится в другом формате с t и z, так есть ли какой-либо способ преобразовать ее непосредственно в формат datetime. Или я должен проанализировать его, чтобы сделать его более понятным, а затем преобразовать его в формат datetime..

Ответ №1:

Попробуйте это: TO_DATE('2011-07-28T23:54:14Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')

Комментарии:

1. Он работает нормально.. Но я вижу только дату, а не время в таблице oracle.. Результат, который я получил, 28 июля-11 не совсем так, как я хотел.. Почему это происходит? И я объявляю тип данных как date.

2. @RaihanJamal, это просто формат даты по умолчанию. Время также фактически сохраняется в этом поле. Вы можете увидеть это с помощью метода TO_CHAR .

3. что не так с этим sytax TO_DATE('2011-10-25 21:48:01.585', 'YYYY-MM-DD HH24:MI:SS')

4. Похоже, что время также зависит от миллисекунд. Если этот формат находится в том же наборе данных, что и элемент в OP, вам необходимо следовать ранее приведенным рекомендациям по стандартизации ваших данных.

5. @lining, так и должно быть TO_DATE('2011-10-25 21:48:01.585', 'YYYY-MM-DD HH24:MI:SS.FF3') , FFn может иметь n = 1 ..9, в зависимости от количества знаков после запятой, которые у вас есть.

Ответ №2:

Привет, у меня была такая же проблема. Я попытался преобразовать переменный параметр ‘2017-02-20 12:15:32’ в дату, TO_DATE('2017-02-20 12:15:32','YYYY-MM-DD HH24:MI:SS') и все, что я получил, было 2017-02-20, время исчезло

Мое решение состояло в том, чтобы использовать TO_TIMESTAMP('2017-02-20 12:15:32','YYYY-MM-DD HH24:MI:SS') now время не исчезает.

Комментарии:

1. Это, вероятно, только из-за форматирования отображения вашего SQL-клиента. Oracle DATE может также включать время, поэтому TO_DATE необязательно отбрасывать часть времени.

Ответ №3:

Вы можете использовать приведение к символу, чтобы увидеть результаты даты

  select to_char(to_date('17-MAR-17 06.04.54','dd-MON-yy hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') from dual;