Select ...
From Table
Where DateCol >= '20100303'
And DateCol < '20100314'
And DatePart(hh,DateCol) Between 18 And 23
請注意,我使用嚴格小於20100314的比較,所以它會在2010年3月14日午夜之前返回任何內容。
編輯意識到你說的是PM而不是AM。
ADDITION在SQL中,語句「Foo Between DateA和DateB」被翻譯爲「Foo> = DateA和Foo < = DateB」。注意到該聲明的第二部分小於或等於到DateB。在我們的查詢中,我們希望在2010年3月13日到午夜之間包含所有內容。我通過將搜索範圍限制在以下,我想要搜索的那一天嚴格小於。
對於小時,DatePart(hh,DateVal)將使用24小時制返回當天的小時。所以下午6點真的是18點。如果我們希望在下午6點到晚上11點之間,我們確實希望在18:00到23:00之間。
ADDITION在我的原始解決方案中出現了一個小問題。系統將返回時間在11點鐘時間內的任何值(例如11:01 PM,11:30 PM,11:50 PM等)。下面是將解決該另一種解決方案:
Select ...
From Table
Where DateCol >= '20100303'
And DateCol < '20100314'
And DateAdd(day, -DateDiff(Day, 0, [DateCol]), [DateCol]) Between '18:00' And '23:00'
基本上,我使用的則DateDiff和使用DateAdd功能以剝離的值的日期部分,然後與我們想要的值進行比較。
你能解釋一下之間的語法差異的where語句和這樣的: WHERE(TimeOrdPlaced BETWEEN '2010-01-31' 和 '2010-02-27')和(DATEPART(HH,TimeOrdPlaced)6至22 ) 我的結果不同,比使用相同日期範圍和時間的語法要高得多。 – Kylee 2010-03-23 19:33:33
認爲這是更容易擴大我的帖子來解釋。 – Thomas 2010-03-23 21:49:31
謝謝!這看起來像在工作。 – Kylee 2010-03-24 21:38:31