我正在使用下面的查詢,如果截止日期列 (eh.Deadline) < 今天 (getdate) 則回傳 1,否則回傳 0。
(case when he.Deadline < CONVERT(VARCHAR(10),GETDATE(),111) then 1 else 0 end) Deadline
一切正常,但我需要更改它以便只比較月份和年份(而不是日期)。
例如,如果截止日期=10/01/2022 并且今天=11/01/2022
- 我的查詢回傳 1 (10/01/2022 < 11/01/2022)
- 我只想比較月份和年份 - 我希望它回傳 0 作為 MM/YYYY 它是相同的(01/2022 = 01/2022)
編輯:
he.Deadline 列具有以下格式:DD/MM/YYYY HH/MM,這無法與 GETDATE 進行比較,并解決我必須使用 CONVERT(VARCHAR(10),GETDATE(),111) 而不是 GETDATE
上面的查詢用于我創建的儀表板,我不想更改資料庫中的任何內容。
我只想比較 MM/YYYY 而不是 DD/MM/YYYY
請問有什么想法嗎?
非常感謝你!
uj5u.com熱心網友回復:
你可以做 (case when EOMONTH(he.Deadline) < EOMONTH(GETDATE()) then 1 else 0 end) Deadline
在比較它們之前,將兩個值的日期設定為月的最后一天,這樣最后只有月/年才重要
編輯:只要Deadline是date...如果不是,那么您必須date在呼叫EOMONTH它之前將其轉換為
uj5u.com熱心網友回復:
首先,您需要確保將日期時間/日期與日期時間/日期進行比較,而不是與日期時間的字串,也不是與字串的字串,因為比較是不同的,并且您想要的結果是比較日期。
然后,您應該將資料存盤在正確的資料型別中,對于日期時間來說,它是datetime2. 將您的字串存盤Deadline為專案的生命周期會給您帶來痛苦和麻煩,并且性能會很差。
但是,在這種情況下,您需要首先將Deadline列正確轉換為日期值,然后解決實際問題的一種方法是與當月的第一天進行比較,如下所示:
select
-- Convert to a date datatype in order to be able to correctly compare to another date
convert(date,substring(he.Deadline,1,10),103) -- Ensure dd/mm/yyyy as opposed to mm/dd/yyyy
<
-- Calculate the first of the month and check whether the Deadline is before then
convert(date,dateadd(day, -1*(datepart(day,getdate())-1), getdate())) then 1 else 0 end Deadline
from (
values ('10/01/2022 12/30')
) he (Deadline)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/411909.html
標籤:
下一篇:觸發互斥布爾欄位
