2014-02-17 456 views
1

在SQL Server中,搜索日期範圍時是否必須指定時間戳?例如,這兩個查詢將返回相同的結果。SQL Server搜索日期範圍

SELECT SalesOrderID, ShipDate 
FROM Sales.SalesOrderHeader 
WHERE ShipDate BETWEEN '2005-07-23T00:00:00' AND '2005-07-24T23:59:59'; 

SELECT SalesOrderID, ShipDate 
FROM Sales.SalesOrderHeader 
WHERE ShipDate BETWEEN '2005-07-23' AND '2005-07-24'; 

回答

3

BETWEEN是包容性的,並沒有指定時默認時間爲00:00:00。

因此,如果您排除時間部分,並且您的字段爲DATETIME,您將在結束日期的時間00:00:00之後排除任何記錄。如果您的字段是DATE,那麼時間不是必需的。

您也可以只使用<和晚一天:

WHERE ShipDate >= '2005-07-23' 
    AND ShipDate < '2005-07-25' 
+0

如果我將記錄更新爲'2005-07-23 10:00:00.000',仍然可以獲取該記錄。 – user595234

+0

是的,但是如果它是'2005-07-24 10:00:00.000',它將被排除在'2005-07-24 00:00:00.000'之後。 –

0

嘗試:

SELECT SalesOrderID, ShipDate 
FROM Sales.SalesOrderHeader 
WHERE cast(ShipDate as date) BETWEEN cast('20050723' as date) AND cast('20050724' as date); 

轉換爲日期類型時,你不需要寫時,分... :)

+1

這種方法有一些問題。看到[鑄造迄今是sargable,但它是一個好主意?](http://dba.stackexchange.com/q/34047/3690) –

+0

謝謝,真的.. – LuisR9