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