使用 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');
我正在尝试创建一个约束来检查记录是否不大于 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');