簡體   English   中英

將日期與日期時間進行比較是否與在SQL Server中首先將日期和日期時間轉換為日期相同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM