逻辑我会使用是一样的东西
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
非常感谢老兄!它像一个魅力工作! –