Oracle日期 - SQL plus - 更改INSERT语句中使用的日期格式

时间:2013-12-30 22:29:02

标签: 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-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上运行正常。

由于

1 个答案:

答案 0 :(得分:5)

你很亲密,但你需要TIMESTAMP equivalent

alter session set NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF';

通常最好不要依赖NLS设置和隐式转换,而是进行显式转换:

INSERT INTO mytable
VALUES('2342343','test',NULL,
  TO_TIMESTAMP('05-DEC-2012 18:30:04.000000', 'DD-MON-YYYY HH24:MI:SS.FF');

最好明确列出列,以便将来进行更改,并且更容易检查您是否按正确顺序排列值。