Подтвердить что ты не робот

Как конвертировать "1985-02-07T00: 00: 00.000Z" (ISO8601) в значение даты в Oracle?

Я попытался преобразовать отметку времени ( "1985-02-07T00: 00: 00.000Z" ) на дату, и мне не удалось выполнить несколько разных попыток.

Ниже представлен запрос, который я пробовал:

 select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
 from dual;

Ваши предложения очень ценятся.

4b9b3361

Ответ 1

to_date преобразует вход в тип DATE, который не поддерживает дробные секунды. Чтобы использовать дробные секунды, вам нужно использовать тип TIMESTAMP, который создается при использовании to_timestamp

Комментарий pst о модификаторе ff3 также корректен.

Значения "Константа" в маске формата должны быть заключены в двойную кавычку

Итак, последнее утверждение:

select to_timestamp('1985-02-07T00:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"')
from dual;

Ответ 2

SQL> select cast(to_timestamp('1985-02-07T00:00:00.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as date)
  2    from dual
  3  /

CAST(TO_TIMESTAMP('
-------------------
07-02-1985 00:00:00

1 row selected.

Ответ 3

Некоторые правила, которые следует соблюдать:

  • Литералы должны быть двойными: MM ожидает номер месяца, "MM" ожидает двойную метку.
  • Формат дробных секунд FF, а не F или FFF. Вы указываете количество цифр с конечным целым числом, например. FF3.
  • Но даты не могут содержать дробные секунды, поэтому вы не можете использовать FF3 в этом контексте.

Это работает:

SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS')
FROM dual;

Я не знаю, есть ли способ игнорировать дробные секунды в TO_DATE(), поэтому я использовал функции манипуляции с строкой, чтобы вырезать их:

SELECT TO_DATE(SUBSTR('1985-02-07T00:00:00.000Z', 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS')
FROM dual;

Ответ 4

SELECT to_timestamp_tz('2012-08-08T09:06:14.000-07:00','YYYY-MM-DD"T"HH24:MI:SS.FF3TZR')
FROM dual;

External table DDL,
extract_date char(29) DATE_FORMAT timestamp WITH TIMEZONE mask 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZR'

Ответ 5

если u хочет получить строку в формате datetime, тогда попробуйте это....

выберите to_char (TO_DATE ('2012-06-26T00: 00: 00.809Z', 'YYYY-MM-DD "T" HH24: MI: SS "." "ZZZZ" '), 'yyyy-MM-dd hh: mm: ss PM ') как EVENT_DATE из двойного

Результат

2012-06-26 12:06:00 AM

только для даты просто используйте...

выберите TO_DATE ('2012-01-06T00: 00: 00.809Z', 'YYYY-MM-DD' T "HH24: MI: SS". "" ZZZZ '') из двойного