簡體   English   中英

如何將日期時間與SQL Server中的日期進行比較

[英]How to compare datetime with only date in SQL Server

Select * from [User] U
where  U.DateCreated = '2014-02-07'     

但是在數據庫中,用戶是在2014-02-07 12:30:47.220 ,當時我只把'2014-02-07'

它不顯示任何數據

不要試圖做這樣的事情:

Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'

這是一種更好的方法:

Select * from [User] U 
where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')

看: Sargable (該頁面已從Wikipedia中刪除)

編輯+避免在where子句(或連接條件)中使用數據上的函數有兩個基本原因。

  1. 在大多數情況下,使用數據函數來過濾或連接會刪除優化器訪問該字段上的索引的能力,從而使查詢更慢(或更“昂貴”)
  2. 另一種是,對於涉及的每行數據,至少執行一次計算。 這可能會為查詢添加數百,數千或數百萬計算,以便我們可以比較像2014-02-07這樣的單一標准。 改變標准以適應數據的效率要高得多。

“修改標准以適應數據”是我描述“使用SARGABLE謂詞”的方式


並且不要在兩者之間使用。

日期和時間范圍的最佳做法是避免BETWEEN並始終使用表單:

WHERE col> ='20120101'AND col <'20120201'此表單適用於所有類型和所有精度,無論時間部分是否適用。

http://sqlmag.com/t-sql/t-sql-best-practices-part-2(Itzik Ben-Gan)

如果您使用的是SQL Server 2008或更高版本,則可以使用date數據類型:

SELECT *
FROM [User] U
WHERE CAST(U.DateCreated as DATE) = '2014-02-07'

應該注意的是,如果對日期列進行索引,那么它仍將使用索引並且是SARGable。 這是日期和日期時間的特例。

在此輸入圖像描述

您可以看到SQL Server實際上將其轉換為>和<子句:

在此輸入圖像描述

我剛剛在一個大表上嘗試了這個,根據@ kobik的注釋在日期列上有一個二級索引,並且仍然使用索引,對於使用BETWEEN或> =和<:的示例不是這種情況。

SELECT *
FROM [User] U
WHERE CAST(U.DateCreated as DATE) = '2016-07-05'

顯示二級索引的索引使用情況

根據您的查詢Select * from [User] U where U.DateCreated = '2014-02-07'

SQL Server正在比較確切的日期和時間即(比較2014-02-07 12:30:47.2202014-02-07 00:00:00.000相等)。 這就是為什么比較的結果是錯誤的

因此,在比較日期時,您還需要考慮時間。 您可以使用
Select * from [User] U where U.DateCreated BETWEEN '2014-02-07' AND '2014-02-08'

當然,這是一個舊線程,但要完成它。

從SQL 2008開始,您可以使用DATE數據類型,這樣您就可以執行以下操作:

SELECT CONVERT(DATE,GETDATE())

OR

Select * from [User] U
where  CONVERT(DATE,U.DateCreated) = '2014-02-07' 

您可以使用LIKE語句而不是= 但要使用DateStamp執行此操作,您需要先將其CONVERT為VARCHAR:

SELECT * 
FROM [User] U
WHERE CONVERT(VARCHAR, U.DateCreated, 120) LIKE '2014-02-07%'

請試試這個。 此查詢可用於日期比較

select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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