使用DATE的约束

时间:2016-10-11 04:29:41

标签: sql oracle ddl check-constraints

我正在尝试创建一个约束来检查记录是否不超过2016年。

这是我数据库中的记录

enter image description here

这是我的问题:

ALTER TABLE SIGHTINGS 
   ADD CONSTRAINT CK_SIGHTING_DATE 
   CHECK (SIGHTING_DATE <=TO_DATE('01-JAN-16'));

但我收到错误说:第1行的错误:

  

ORA-02436:CHECK中错误指定了日期或系统变量   约束

我在这个网站上查了一些类似的问题,但解决方案并没有解决我的问题。

2 个答案:

答案 0 :(得分:3)

一种选择是使用extract()功能,因为您只想查看年份:

ALTER TABLE SIGHTINGS 
   ADD CONSTRAINT CK_SIGHTING_DATE 
   CHECK (extract(year from SIGHTING_DATE) < 2016);

或使用ANSI日期文字:

ALTER TABLE SIGHTINGS 
   ADD CONSTRAINT CK_SIGHTING_DATE 
   CHECK (SIGHTING_DATE < date '2016-01-01');

答案 1 :(得分:0)

你有日期规定

var ma = d3.line()
        .x(function(d) { return x(parseDate(d.date)); })
        .y(function(d) { return y(d.ma); });

ALTER TABLE SIGHTINGS 
   ADD CONSTRAINT CK_SIGHTING_DATE 
   CHECK (SIGHTING_DATE <= 
               /*TO_DATE('01-JAN-16','DD-MON-YY') as I was pointed your should specify 4 digits for year*/ 
                 TO_DATE('01-JAN-2016','DD-MON-YYYY'));
当你说“不超过2016”时,你的意思是另一件事 您的支票日期为2016年1月1日,但不允许2016年1月2日。 如果您想包括整个2016年的写作

 ALTER TABLE SIGHTINGS 
   ADD CONSTRAINT CK_SIGHTING_DATE 
   CHECK (SIGHTING_DATE <=DATE'2016-01-01');

或     trunc(SIGHTING_DATE,'yy')&lt; = DATE'2016-01-01'