邏輯我會使用是一樣的東西
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
非常感謝老兄!它像一個魅力工作! –