給定帶有日期時間列的表,如何查詢日期與我指定的值匹配但忽略時間部分的行?如何選擇特定日期的行,忽略SQL Server中的時間
例如,select * from sales where salesDate = '11/11/2010'
對於此查詢,我們不關心的時間。其他查詢需要時間組件,所以我們不能只存儲日期組件。
謝謝!
給定帶有日期時間列的表,如何查詢日期與我指定的值匹配但忽略時間部分的行?如何選擇特定日期的行,忽略SQL Server中的時間
例如,select * from sales where salesDate = '11/11/2010'
對於此查詢,我們不關心的時間。其他查詢需要時間組件,所以我們不能只存儲日期組件。
謝謝!
比較時,您可以刪除時間部分:
SELECT *
FROM sales
WHERE CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, salesDate))) = '11/11/2010'
另一種方法是改變選擇覆蓋所有的開始和結束的時間日期:
SELECT *
FROM sales
WHERE salesDate BETWEEN '11/11/2010 00:00:00.00' AND '11/11/2010 23:59:59.999'
select * from sales where salesDate between '11/11/2010' and '12/11/2010' --if using dd/mm/yyyy
更正確的方式做到這一點:
DECLARE @myDate datetime
SET @myDate = '11/11/2010'
select * from sales where salesDate>[email protected] and salesDate<dateadd(dd,1,@myDate)
如果只指定的日期,這意味着總午夜。如果你想確保間隔不重疊,有一對>=
和<
你可以在一個單一的語句中做切換之間,但它只是使用該值的兩倍。
事情是這樣的:
select
*
from sales
where salesDate >= '11/11/2010'
AND salesDate < (Convert(datetime, '11/11/2010') + 1)
select
*
from sales
where
dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010'
我知道它已經在這個問題上一段時間,但我只是在尋找相同的答案,發現這似乎是最簡單的解決方案:
select * from sales where datediff(dd, salesDate, '20101111') = 0
實際上我用它更多地在最後一天內找東西或二,所以我的版本是這樣的:
select * from sales where datediff(dd, salesDate, getdate()) = 0
而到今天改變0到1,我得到昨天的交易中,2是在此之前一天,等等。如果你想要的一切的最後一個星期,只是改變了等於一個低於或相等到:
select * from sales where datediff(dd, salesDate, getdate()) <= 7
不錯的解決方案。如果您將日期格式更改爲'yyyy-MM-dd',確認可以使用h2 db。 – adam0404 2015-05-04 17:31:41
試試這個:與你的解決方案
true
select cast(salesDate as date) [date] from sales where salesDate = '2010/11/11'
false
select cast(salesDate as date) [date] from sales where salesDate = '11/11/2010'
我沒有得到結果 – 2016-09-30 11:10:21
很抱歉聽到這個消息。你確定你的日期範圍是正確的,並且與數據匹配的數據存在於數據庫中? – Oded 2016-09-30 11:58:13