使用 DATE 进行约束

Constrains using DATE

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

这是我数据库中的记录

这是我的查询:

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

但我收到一条错误消息:第 1 行出现错误:

ORA-02436: date or system variable wrongly specified in CHECK constraint.

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

您已指定日期

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'));

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

还有一件事,你说 "no greater than 2016" 是什么意思 您的检查日期为 2016 年 1 月 1 日,但不允许 2016 年 1 月 2 日。 如果你想包括整个 2016 年 write

SIGHTING_DATE < DATE'2017-01-01'

或 trunc(SIGHTING_DATE,'yy') <=DATE'2016-01-01'

一个选项是使用 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');