[英]Is comparing a date to datetime the same as first casting the former to a datetime in SQL Server?
我有一個表,該表的列[MyDate]
的數據類型為DATE
。
我有一個變量@MyDateTime DATETIME
。
比較如下:
WHERE [MyDate] < @MyDateTime
語義上等同於:
WHERE CONVERT(DATETIME, [MyDate]) < @MyDateTime
(在SQL Server 2012中)? (意味着這兩個比較將始終產生相同的結果。)如果不同,那么兩個不相同的值是什么?
這個問題是由以下事實引起的:我觀察到前者的比較使我可以更有效地利用[MyDate]
上的索引,而后者則沒有。
它們在邏輯上是等效的,但在功能上是等效的。
[MyDate] < @MyDateTime
是相同的
CONVERT(DATETIME, [MyDate]) < @MyDateTime
但我會這樣寫
[MyDate] < CONVERT(DATE,@MyDateTime)
這樣可以消除某些比較日期和日期時間的情況,而忽略了小時和分鍾; 可悲的是,我在職業生涯中多次見過這種情況(很可惜,不是我的錯誤)。
通常,如果將列包裝在函數中,因為必須將函數應用於所有行才能確定比較的有效性,因此無法最佳利用索引。 但是正如Gordon Linoff所說,該索引仍根據我的測試使用,並且在轉換為帶索引的DATE列的DATETIME時不會變慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.