为什么下面的sql会产生ORA-01810错误?我研究了错误,我为每个日期插入使用不同的日期格式
mvn clean install tomcat7:run
答案 0 :(得分:40)
TO_TIMESTAMP(' 20151206 00:00:00',' yyyymmdd hh:mm:ss')
这有两个方面是错误的:
<强> 1。格式代码不正确
您已重复MM
格式掩码两次。 MM
月,MI
分钟。
SQL> SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss') FROM dual; SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss') FROM dual * ERROR at line 1: ORA-01810: format code appears twice
<强> 2。时间部分不正确
00:00:00
错误,因为它会抛出 ORA-01849 ,因为小时不能为零,它必须介于1到12之间。
SQL> SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mi:ss') FROM dual; SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mi:ss') FROM dual * ERROR at line 1: ORA-01849: hour must be between 1 and 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
答案 1 :(得分:10)
您已在mm
TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')
格式代码
MM
适用于月
MI
用于分钟
您可能打算使用YYYYMMDD HH:MI:SS
。
有关详细信息,请参阅date format models列表。