Sql-Server
在 WHERE 子句中使用日期時間列的 DATE 部分
我正在建構一個 POS 系統,在其中收集事件發生的日期和時間。我想
DATE
在我的 SQL 查詢中僅使用 datetime 列的一部分來提取一些報告。我目前的查詢如下所示:
SELECT * FROM tbl_item_trans WHERE (date_time BETWEEN @start AND @end) ORDER BY date_time DESC, code
但是,如果我輸入兩個日期,例如 9 月 14 日和 15 日,它只會從 14 日提取數據。如果我想包括 9 月 15 日的交易,則結束日期必須是 9 月 16 日。
我怎麼解決這個問題?
DATE
如果我只使用列的一部分也會更好datetime
。和變數使用數據類型
@start
,例如“2017-09-16”。@end``date
嘗試包含的開始日期和獨占的結束日期:
date_time >= @start AND date_time < DATEADD(day, 1, @end)
另請參閱BETWEEN 和魔鬼有什麼共同點?亞倫伯特蘭。
如果查詢被編寫為 use ,Sargability 就不會成為問題
CAST(date_time AS DATE)
,因為 SQL Server 將包含一個幫助器覆蓋 seek 謂詞。請參閱Rob Farley(記錄於 2010 年的 SQLBits VII )的了解 SARGability(以使您的查詢執行得更快) ,其中展示了這一點。但是請注意,轉換可能仍會影響基數估計的準確性。