我想根據特定日期查詢表,但問題是該字段的數據類型爲datetime如何通過日期查詢Datetime對象?
select * from Supplier where modified_Date='2011-05-07 12:52:16.830'
該查詢返回結果
但
select * from Supplier where modified_Date='2011-05-07'
有沒有結果
我想根據特定日期查詢表,但問題是該字段的數據類型爲datetime如何通過日期查詢Datetime對象?
select * from Supplier where modified_Date='2011-05-07 12:52:16.830'
該查詢返回結果
但
select * from Supplier where modified_Date='2011-05-07'
有沒有結果
SQL Server 2008的數據類型爲DATE
。您可以將您的DATETIME
投射到DATE
並進行比較。
SELECT *
FROM Supplier
WHERE CAST(Modified_Date AS DATE) = '2011-05-07'
您必須考慮時間因素,因爲2011-05-07 <> 2011-05-07 12:52:16.830
切換到一個範圍類型的查詢
select * from Supplier where
modified_Date >= '2011-05-07'
and
modified_Date < '2011-05-08'
...或者因爲你使用SQL Server 2008
select * from Supplier where
CAST(modified_Date AS date) = '2011-05-07'
從性能的角度轉換爲日期,使用第一個。或者有一個索引計算列,可爲您執行CAST並在此過濾此數據類型SQL Server 2008的數據類型爲
轉換列到日期的選擇查詢將帶來的結果。
剛剛發佈的替代語法GBN的回答,您還可以使用BETWEEN
:
SELECT *
FROM Supplier
WHERE modified_Date BETWEEN '2011-05-07' AND '2011-05-07 23:59:59:999'
編輯:你必須指定的結束時間爲BETWEEN
默認爲午夜這將在此返回附加行案件。
從BOL:
返回TRUE之間。如果 與test_expression的值大於或 等於與begin_expression 的值且小於或等於 end_expression的值,。
從性能角度來看,SQL Server 2008會將第二個轉換成類似第一個的東西。 – 2011-05-23 10:11:52
@Martin:是嗎?目前無法測試。想到這個雖然https://connect.microsoft.com/SQLServer/feedback/details/653206/the-optimizer-should-be-able-to-understand-the-invertability-of-built-in-intrinsics-on- date-for-the-index-index-sargability – gbn 2011-05-23 10:17:32
是的,它爲計劃添加了一個計算標量,該範圍的兩端都要查找。請參閱http://connect.microsoft.com/SQLServer/feedback/details/526431/make-more-functions-sargable – 2011-05-23 10:19:05