ORA-01810: 格式代码出现两次
Posted
技术标签:
【中文标题】ORA-01810: 格式代码出现两次【英文标题】:ORA-01810: format code appears twice 【发布时间】:2016-03-16 18:34:28 【问题描述】:为什么下面的 sql 会产生 ORA-01810 错误?我研究了错误,我为每个日期插入使用不同的日期格式
INSERT INTO bag_grte_clm
(
schd_dprt_ldt,
arr_trpn_stn_cd,
bkg_crtn_gdt,
sbmt_bag_grte_clm_dt,
bag_grte_clm_stt_cd,
lst_updt_gts,
bag_grte_clm_gts,
dprt_trpn_stn_cd
)
VALUES (
TO_DATE('2015/12/06', 'yyyy/mm/dd'),
'YUL',
TO_DATE('2015-11-15', 'yyyy-mm-dd'),
TO_DATE('120615', 'MMDDYY'),
'DENIAL',
(current_timestamp),
TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss'),
'ATL'
)
【问题讨论】:
【参考方案1】:TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')
有两个方面的错误:
1.格式代码不正确
您已经重复了两次MM
格式掩码。 MM
是 月,MI
是 分钟。
2。时间部分不正确
00:00:00
是错误的,因为它会抛出 ORA-01849,因为 小时不能为零,它必须在 1 到 12 之间。
正确的方法是使用 24 小时 格式,或者保留默认为 12 AM
的 时间部分。
例如,
24 小时制:
SQL> SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh24:mi:ss') my_tmstamp FROM dual;
MY_TMSTAMP
---------------------------------------------------------------------------
06-DEC-15 12.00.00.000000000 AM
没有时间部分:
SQL> SELECT TO_TIMESTAMP('20151206', 'yyyymmdd') my_tmstamp FROM dual;
MY_TMSTAMP
-----------------------------------------------------------------------
06-DEC-15 12.00.00.000000000 AM
【讨论】:
【参考方案2】:您在TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')
中使用了两次mm
格式代码
MM
适用于月MI
适用于分钟
您可能打算使用YYYYMMDD HH:MI:SS
。
更多信息请查看date format models列表。
【讨论】:
TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mi:ss')
仍然是错误的。它将抛出 ORA-01849: hour must be between 1 and 12。以上是关于ORA-01810: 格式代码出现两次的主要内容,如果未能解决你的问题,请参考以下文章