Ограничения с использованием DATE

Я пытаюсь создать ограничение, чтобы проверить запись не больше, чем в 2016 году.

Вот запись в моей базе данных

введите описание изображения здесь

Вот мой запрос:

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

Но я получил сообщение об ошибке: ОШИБКА в строке 1:

ORA-02436: дата или системная переменная, неправильно указанная в ограничении CHECK.

Я проверил несколько подобных вопросов на этом сайте, но там решения не решают мою проблему.

2 ответа

Решение

Одним из вариантов является использование 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');

Вы указали дату

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

другое - это то, что вы имеете в виду, когда говорите "не больше 2016 года". Ваш чек датирован не 01 января 2016 года, но не разрешен 02 января 2016 года. Если вы хотите включить весь 2016 год, напишите

SIGHTING_DATE < DATE'2017-01-01'

или усечение (SIGHTING_DATE,'yy') <=DATE'2016-01-01'

Другие вопросы по тегам