我收到错误“无效月份”

时间:2013-06-20 06:45:20

标签: date database-design oracle11g format

create table Department
(Dname varchar(255) NOT NULL, Dnumber int NOT NULL PRIMARY KEY, Mgr_SSN char(9) NOT NULL, Mgr_start_Date DATE);

insert into Department values('HR', '1', '11001', '2012-04-05 10:15:00');

我收到错误"not valid month" 我们在创建表时应该定义日期格式吗? 我正在使用Oracle11g

1 个答案:

答案 0 :(得分:1)

如果您有DATE列,则应始终插入DATE,而不是VARCHAR2。依靠隐式转换来正确转换字符串是一个坏主意 - 不同的会话很容易有不同的NLS设置,因此,不同地进行隐式转换(导致不同的DATE或者错误)。最简单的方法是使用to_date函数。

insert into Department( dname, 
                        dnumber,
                        mgr_ssn,
                        mgr_start_date )
  values('HR', 
         1, 
         '11001', 
         to_date( '2012-04-05 10:15:00', 'yyyy-mm-dd hh24:mi:ss') );

我还修改了语句以列出列,这通常是一种很好的做法,因为它确保您不必每次都查找表中列的物理顺序,因为它允许{{1}如果向表中添加新列,将来的语句将起作用。由于INSERTdnumber,我还更改了NUMBER语句以插入数字而不是插入字符串(同样,如果不需要,也不要依赖隐式转换所以)。我没有纠正你有一个INSERT列代表你要插入5个字符串的社会安全号的明显错误。