Ошибка может быть уменьшена до:
select TO_DATE('11/12/2018T05:10:30-00:00','DD/MM/YYYY ') from dual;
Error report -
ORA-01861: literal does not match format string
Что является разумным, поскольку оно явно не соответствует.Вам необходимо включить элементы времени в маску формата, а также символьный литерал для фиксированного 'T' и для фиксированного смещения часового пояса:
select TO_DATE('11/12/2018T05:10:30-00:00','DD/MM/YYYY"T"HH24:MI:SS"-00:00"') from dual;
TO_DATE('11/12/2018
-------------------
2018-12-11 05:10:30
Если эта часть 'часового пояса' не является 't исправлено и должно учитываться, тогда вы можете использовать to_timestamp_tz()
вместо to_date()
:
select TO_TIMESTAMP_TZ('11/12/2018T05:10:30-00:00','DD/MM/YYYY"T"HH24:MI:SS.FFTZH:TZM')
from dual;
TO_TIMESTAMP_TZ('11/12/20
-------------------------
2018-12-11 05:10:30.0 GMT
Я включил .FF
в модель формата, а также элементы смещения часового пояса (вы можете использовать TZR
вместо TZH:TZM
, если вам могут быть переданы регионы вместо смещений), поскольку в вашем примере существующих данных есть доли секунды, даже если в этом случае ваша буквальная строка не имеет значения
может cast()
, что к дате или простой отметке времени, если это необходимо, или, возможно, нормализовать к UTC, если входными значениями могут быть другие зоны / смещения:
select TO_TIMESTAMP_TZ('11/12/2018T04:10:30-01:00','DD/MM/YYYY"T"HH24:MI:SS.FFTZH:TZM') as orig,
SYS_EXTRACT_UTC(
TO_TIMESTAMP_TZ('11/12/2018T04:10:30-01:00','DD/MM/YYYY"T"HH24:MI:SS.FFTZH:TZM')) as utc
from dual;
ORIG UTC
---------------------------- ---------------------
2018-12-11 04:10:30.0 -01:00 2018-12-11 05:10:30.0