插入日期时出现错误ORA-01861:文字与格式字符串不匹配



在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

最新更新