首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DATEDIFF约束

DATEDIFF约束
EN

Stack Overflow用户
提问于 2019-04-13 22:13:18
回答 1查看 196关注 0票数 0

我希望它是这样的:当其中一列中的日期与系统日期之间的差异超过6个月时,表中的另一个值会发生变化。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2019-04-13 22:15:29

SQL Server无法识别SYSDATE,除非它是表中的列。您可以尝试这样做:

代码语言:javascript
复制
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月份之前的几天是正确的。

如果您想要6个实际月份,则使用日期比较:

代码语言:javascript
复制
ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1 
    CHECK (LAST_RENEWAL_DATE < DATEADD(month, -6, GETDATE()) AND
           CLASS IN (1, 2)
          );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55666431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档