Как конвертировать "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;
Ваши предложения очень ценятся.
Ответы
Ответ 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 '') из двойного