Ограничение DATEDIFF - PullRequest
       2

Ограничение DATEDIFF

0 голосов
/ 13 апреля 2019

Я хочу, чтобы когда разница между датой в одном из столбцов и системной датой отличалась более чем на 6 месяцев, одно из других значений в таблице изменяется.

ALTER TABLE MEDICAL_CERTIFICATE
ADD CONSTRAINT MC_CLASS1 
CHECK(DATEDIFF(mm, LAST_RENEWAL_DATE, SYSDATE) < 6  AND CLASS = '1' OR CLASS = '2');

Программа возвращается с ошибкой неверного идентификатора.

Мне это нужно, поэтому, если последняя дата обновления и текущая дата имеют разницу более чем в 6 месяцев, класс меняется с 1 на 2.

1 Ответ

1 голос
/ 13 апреля 2019

SQL Server не распознает SYSDATE, если это не столбец в вашей таблице.Вы можете попробовать это:

ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1 
    CHECK (DATEDIFF(month, LAST_RENEWAL_DATE, GETDATE()) < 6 AND 
           CLASS IN (1, 2)
          );

Обратите внимание, что я изменил логику для CLASS.Это, вероятно, то, что вы намерены.Я предполагаю, CLASS - это число, поэтому я удалил одинарные кавычки (вставьте их обратно, если это строка).

Возможно, вы не поймете, как работает DATEDIFF().Подсчитывает количество границ месяца между двумя датами.Итак, если сегодня какой-либо день июля, то это верно только для дней до февраля.

Если вы хотите шесть фактических месяцев, используйте сравнения дат:

ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1 
    CHECK (LAST_RENEWAL_DATE < DATEADD(month, -6, GETDATE()) AND
           CLASS IN (1, 2)
          );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...