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