几个世纪以来,在Oracle中使用4位数年份< 1900

时间:2015-12-03 14:01:05

标签: database oracle date

我需要在日期中使用4位数的年份来建立一个以历史事实为中心的数据库(例如贝多芬的出生(1700年代)/死亡(19世纪)日期)。我似乎无法弄清楚如何使用INSERT语句输入此信息。这是我到目前为止所得到的,但显然它不起作用......

CREATE TABLE musicians (
id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(30) NOT NULL,
last_name VARCHAR2(30) NOT NULL,
pri_inst VARCHAR2(15) NOT NULL,
born DATE NOT NULL,
died DATE
);

INSERT INTO musicians (
inc_mus_id.nextval, 'Ludwig', 'van Beethoven', 'Piano', '16-Dec-1770', '26-Mar-1827')

思想?

编辑:这是实际的错误消息:ORA-01747:user.table.column,table.column或列规范无效。

编辑2:还试过这个:     INSERT INTO音乐家(     inc_mus_id.nextval,'Ludwig','van Beethoven','Piano',TO_DATE('16 -Dec-1770','dd-Mon-RRRR'),TO_DATE('26 -Mar-1827','dd-Mon -RRRR'))

编辑3:解决了!谢谢@Rene!此外,可以在没有TO_DATE函数的情况下执行此操作,日期格式为:'16 / Dec / 1770'。

2 个答案:

答案 0 :(得分:3)

ORA-01747错误是因为您忘记了括号前的VALUES关键字。

更有效的插入日期的方法是使用ANSI Date literal

INSERT INTO musicians VALUES (
  inc_mus_id.nextval,
  'Ludwig',
  'van Beethoven',
  'Piano',
  DATE '1770-12-16',
  DATE '1827-03-26'
)

或使用TO_DATE

INSERT INTO musicians VALUES (
  inc_mus_id.nextval,
  'Ludwig',
  'van Beethoven',
  'Piano',
  TO_DATE( '16-Dec-1770', 'DD-Mon-YYYY' ),
  TO_DATE( '26-Mar-1827', 'DD-Mon-YYYY' )
)

答案 1 :(得分:2)

问题似乎与日期无关,但语法错误。 试试这个:

insert into musicians
   (id
   ,first_name
   ,last_name
   ,pri_inst
   ,born
   ,died)
values
   (inc_mus_id.nextval
   ,'Ludwig'
   ,'van Beethoven'
   ,'Piano'
   ,to_date('16-Dec-1770', 'dd-Mon-RRRR')
   ,to_date('26-Mar-1827', 'dd-Mon-RRRR'));