我会采用的逻辑类似于
WHEN DateFin > CASE WHEN [Today is after the 7th] THEN [1st of This Month]
ELSE [First of Last Month]
END
THEN 1
ELSE 0
END
因此,需要解决的部分是找到合适的日期进行比较。最简单的方法是获取本月的第一天,即 7 天前的那一天。获取当月 1 日的标准逻辑是:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')
或者,如果您更喜欢更短的方法,您可以依赖将 int 隐式转换为日期:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
然后将这个逻辑应用到 7 天前:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, '19000101', DATEADD(DAY, -7, GETDATE())), '19000101')
发表完整声明:
save_visible = CASE WHEN DateFin >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', DATEADD(DAY, -7, GETDATE())), '19000101')
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END
这里是这个逻辑的快速测试
SELECT Today = d.Date,
CutOffDate = CAST(DATEADD(MONTH, DATEDIFF(MONTH, '19000101', DATEADD(DAY, -7, d.Date)), '19000101') AS DATE)
FROM ( SELECT Date = CAST(DATEADD(DAY, - Number, '20140610') AS DATE)
FROM master..spt_values
WHERE [Type] = 'P'
AND Number BETWEEN 0 AND 50
) AS d
给予
Today CutOffDate
2014-06-09 2014-06-01
2014-06-08 2014-06-01
2014-06-07 2014-05-01
2014-06-06 2014-05-01
....
2014-05-08 2014-05-01
2014-05-07 2014-04-01
2014-05-06 2014-04-01
2014-05-05 2014-04-01