需要實作邏輯如果實際是 <= 第二天上午 10 點那么它的 1 否則 0
這是我的測驗記錄
Create table #tmp (ID int, Actual Datetime)
Insert into #tmp values (1,'2022-01-09 13:55:29.340')
Insert into #tmp values (2,'2022-01-07 13:55:29.340')
Insert into #tmp values (3,'2022-01-08 13:55:29.340')
select * from #tmp
預期產出
ID Actual 1/0
1 2022-01-09 13:55:29.340 0
2 2022-01-07 13:55:29.340 1
3 2022-01-08 13:55:29.340 1
對于 ID 1,它應該是 0,因為實際是 06,并且是在第二天上午 10 點之后。ID 2 和 3 應該為 1,因為它小于或等于第二天上午 10 點之前。
我被困在如何檢查第二天上午 10 點。請幫我解決這個問題。
uj5u.com熱心網友回復:
使用此查詢:
select *,case when Actual<=DATEADD(HOUR, 10, CAST(CAST(DATEADD(day, 1, GETDATE()) AS DATE) AS DATETIME)) then 0 else 1 end as '1/0' from #tmp
今天的日期是 2022-01-07,我的結果是:
ID Actual 1/0
1 2022-01-06 13:55:29.340 0
2 2022-01-07 13:55:29.340 0
3 2022-01-08 13:55:29.340 1
如果您想與今天進行比較,那么:
select *,case when Actual<=DATEADD(HOUR, 10, CAST(GETDATE() AS DATE) AS DATETIME)) then 0 else 1 end as '1/0' from #tmp
輸出:
ID Actual 1/0
1 2022-01-06 13:55:29.340 0
2 2022-01-07 13:55:29.340 1
3 2022-01-08 13:55:29.340 1
uj5u.com熱心網友回復:
您可以在 00:00 獲得第二天(從當前日期時間開始),如下所示
DECLARE @nextday DATE = DATEADD(DAY, 1, CAST(GETDATE() AS DATE))
然后你需要增加額外的 10 小時。但是由于上述結果是 aDATE并且您不能將小時數添加到 aDATE您必須DATETIME再次轉換回。
DECLARE @limit DATETIME = DATEADD(HOUR, 10, CAST(@nextday AS DATETIME))
或者在一個運算式中將所有內容放在一起
DECLARE @limit DATETIME = DATEADD(HOUR, 10, CAST(DATEADD(Day , 1, CAST(GETDATE() AS DATE)) AS DATETIME))
然后你可以得到你需要的0/1列CASE
SELECT id, actual, CASE WHEN actual <= @limit THEN 1 ELSE 0 END
FROM #tmp
但要知道,這將選擇一切小于第二天上午10點,也就是過去所有的資料。如果你不想要,你可能也需要一個下限。
uj5u.com熱心網友回復:
Select *
, Flag = iif(Actual < dateadd(day, datediff(day, '10:00', getdate()) 1, '10:00'), 1, 0);
From #tmp
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404947.html
標籤:
上一篇:如果2 記錄,保持最高保費
下一篇:如何選擇價值最高的12個月?
