ORA-01810:格式代码出现两次

时间:2015-12-10 23:14:34

标签: sql oracle timestamp date-formatting

为什么下面的sql会产生ORA-01810错误?我研究了错误,我为每个日期插入使用不同的日期格式

mvn clean install tomcat7:run

2 个答案:

答案 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列表。