在WSH_Delivery_Details_Interface中插入日期(https://docs.oracle.com/cloud/r13_update17c/scmcs_gs/OEDSC/WSH_DELIVERY_DETAILS_tbl.htm)抛出此错误
查询:
insert into WSH_DEL_DETAILS_Interface
(DELIVERY_DETAIL_INTERFACE_ID, CREATION_DATE, Date_Requested)
values
(30010985553,
TO_DATE('11/12/2018T05:10:30-00:00', 'DD/MM/YYYY '),
TO_DATE('11/12/2018', 'DD/MM/YYYY'));
creation_date和date_requested列中的样本记录:
Date_Requested Creation_Date
16-JUN-10 17-JUN-10 03.40.31.865000000 PM
错误可以减少为:
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
如果"时区"部分没有固定并且需要兑现,那么您可以使用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