Oracle日期-SQL plus-更改INSERT语句中使用的日期格式
我试图通过sqlplus运行一个包含以下insert语句的脚本Oracle日期-SQL plus-更改INSERT语句中使用的日期格式,sql,oracle,date,sqlplus,Sql,Oracle,Date,Sqlplus,我试图通过sqlplus运行一个包含以下insert语句的脚本 INSERT INTO mytable VALUES('423234','test',NULL,'05-DEC-2012 18:30:03.000000'); INSERT INTO mytable VALUES('2343423','test',NULL,'05-DEC-2012 18:30:03.000000'); INSERT INTO mytable VALUES('234234','test',NULL,'05-DEC-2
INSERT INTO mytable
VALUES('423234','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('2343423','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('234234','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('234234','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('2342343','test',NULL,'05-DEC-2012 18:30:04.000000');
运行脚本时,出现以下错误:
ERROR at line 2:
ORA-01849: hour must be between 1 and 12
我认为这只是NLS_DATEFORMAT参数的一个问题,我所要做的就是在会话中更改它,它就会工作。问题是我不能得到正确的格式
这是我尝试过的,但我得到了一个无法识别的日期格式错误
alter session set NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS.FF';
上述模式是否适用于日期'05-DEC-2012 18:30:04.000000'
顺便说一下,脚本在SQLDeveloper上运行良好
谢谢您很接近,但您需要: 通常,最好不要依赖NLS设置和隐式转换,而是执行显式转换:
INSERT INTO mytable
VALUES('2342343','test',NULL,
TO_TIMESTAMP('05-DEC-2012 18:30:04.000000', 'DD-MON-YYYY HH24:MI:SS.FF');
最好也明确列出这些列,以便将来进行更改,并且更容易检查是否按正确的顺序排列了值。列是
日期还是时间戳
?FF
格式元素不能识别为DATE
,因为它不支持小数秒。该列被定义为时间戳(6)。您永远不应该依赖隐式数据类型转换(以及隐式NLS设置)。您应该使用ANSI日期文字或带有格式掩码的to_date()
函数来指定日期值。
INSERT INTO mytable
VALUES('2342343','test',NULL,
TO_TIMESTAMP('05-DEC-2012 18:30:04.000000', 'DD-MON-YYYY HH24:MI:SS.FF');