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

时间:2018-12-11 09:29:04

标签: sql oracle

在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

1 个答案:

答案 0 :(得分:4)

错误可以减少为:

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()将该日期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 设置为日期或原始时间戳,如果输入值可以是其他区域/偏移量,则可以将其标准化为UTC:

map()