我在提取 30 天內到期的記錄時遇到了一些麻煩。我正在使用的資料庫將日期存盤在 char(10) 欄位中,格式為 103(dd/mm/yyyy 或 10/12/2021)。我使用了一個轉換函式來使這個日期可用,但是當我嘗試將它與一個 between 查詢一起使用時它失敗了:
WHERE
CONVERT(Date, SUBSTRING(TDate, 1, 10), 103)
BETWEEN DATEADD(DAY, 30, GETDATE()) AND GETDATE()
現在我懷疑它失敗了,因為GETDATE()默認格式為 yyyy-mm-dd-time,所以比較不起作用。我的問題是,如何轉換GETDATE()為格式 103 以獲得正確的比較,或者是否將我的 TDate 欄位轉換為其他內容以使其正常作業?
uj5u.com熱心網友回復:
運算式x BETWEEN a AND b與x >= a AND x <= b.
現在GETDATE() 30總是會大于GETDATE()所以這個條件永遠不會對任何值成立——就像x >= (y 30) and x <= y對任何 x 和 y 都不成立一樣。
然后我們有另一個問題,您將日期與日期時間進行比較。如果日期2021-12-10和當前日期時間是,2021-12-10 12:00 PM那么當您檢查日期 >= 日期時間時,比較將回傳 false。我推薦以下內容:
WHERE CONVERT(DATE, tdate, 103) >= CAST(GETDATE() AS DATE)
AND CONVERT(DATE, tdate, 103) <= DATEADD(DAY, 29, CAST(GETDATE() AS DATE)) -- the range [0, 29] contains 30 days
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379303.html
標籤:sql sql-server
上一篇:SQLServer-僅當同一列和表中該用戶ID存在值B時,才排除具有值A的所有行
下一篇:如何從日志中獲取特定名稱
