【发布时间】:2017-11-29 17:06:37
【问题描述】:
我有一个表格,其中月份和年份字段为整数,例如:
Month | Year
------------
10 | 17
------------
11 | 17
------------
12 | 17
------------
1 | 18
------------
(第 17 年代表 2017 年,第 18 年代表 2018 年)
我想在查询中添加一个计算字段以检查日期是否过期
SELECT [Year], [Month],
CASE WHEN
([Year]+2000) < DATEPART(Year, GetDate()) OR
(([Year]+2000) = DATEPART(Year, GetDate()) AND [Month] < DATEPART(Month, GetDate()))
THEN 1 ELSE 0 END AS IsExpired
FROM test
输出是
Month | Year | IsExpired
------------------------
10 | 17 | 1
------------------------
11 | 17 | 1
------------------------
12 | 17 | 1
------------------------
1 | 18 | 1
------------------------
预期的输出是(因为当前的 GetDate() 是 2017-11-29):
Month | Year | IsExpired
------------------------
10 | 17 | 1
------------------------
11 | 17 | 0
------------------------
12 | 17 | 0
------------------------
1 | 18 | 0
------------------------
在http://sqlfiddle.com/#!6/8c807/2上观看直播
我做错了什么?
【问题讨论】:
-
仔细看看你的 sql fiddle。 select * from test 然后仔细查看 Year 和 Month 中的值....它们是倒数的。但老实说,您真正做错的是将部分日期存储在单独的列中。而是使用具有日期数据类型的单个列,您不必跳过箍来进行日期评估。如果您将正确的值放在正确的列中,您的代码就可以正常工作。
-
@SeanLange 哦,谢谢,我很愚蠢...:D
标签: sql sql-server tsql