【发布时间】:2011-03-30 04:56:15
【问题描述】:
我有一个 DateTime 列。我想提取某个日期范围内从 8:30 到 16:15 的所有记录。我的问题是我需要将小时和分钟作为单个时间值进行比较。我可以测试 DATEPART 是否大于或小于几个小时的值,但是如果我这样做几分钟,如果当天晚些时候的时间具有较小的分钟值,我的查询将失败。
我查看了 INTERVAL、BETWEEN、DATEPART、DATEDIFF 等,但如果没有可以在不同日期的记录中使用的“TimeOfDay”值,我不知道该怎么做。
我尝试减去日期的年、月和日部分,以便只比较一天中的时间,但是当尝试减去日期的年部分时,我得到一个溢出错误:
这部分有效:
select - cast( DATEPART(YEAR, CallTime) as integer) from history
这失败了:
select DATEADD(YEAR, - cast( DATEPART(YEAR, CallTime) as integer), CallTime)
from history where calltime is not null
我也尝试将小时和分钟部分转换为字符,将它们连接起来并与我的目标范围进行比较,但这也失败了。
我相信较新版本的 SQL Server 可能具有处理这种情况的功能,但我无法使用。
我希望并想象有一个简单、明显的解决方案,但它让我望而却步。
【问题讨论】:
标签: sql-server sql-server-2005 tsql