DATEDIFF约束

时间:2019-04-13 14:13:18

标签: sql sql-server

我想要这样,以便当其中一列中的日期与系统日期之间的差额相差超过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 个答案:

答案 0 :(得分:1)

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()的工作方式。它计算两个日期之间的月边界数。因此,如果今天是7月中的任何一天,则仅在2月之前的天是正确的。

如果您想要六个月的实际时间,请使用日期比较:

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