我有带有 DATETIME 列时间戳的数据,我想将其过滤到 DATETIME 介于上午 9:30 到下午 5:30 之间的任意一天的记录集。最好的方法是什么?
更新:更改是因为我需要精确到分钟,而不仅仅是小时。对此感到抱歉。
最佳答案
您始终可以将其编写为用户定义函数,特别是如果您需要定期执行此操作
CREATE function dbo.timepart (@date as SMALLDATETIME)
RETURNS SMALLDATETIME
AS
BEGIN
RETURN @date - DATEADD(d, DATEDIFF(d,0,@date), 0)
END
然后像这样使用
SELECT * FROM table
WHERE dbo.timepart(date_field) BETWEEN '9:30' AND '17:30'
在 SQL Server 2005 中使用以下内容进行测试
DECLARE @dates TABLE (date DATETIME)
DECLARE @date DATETIME
SET @date = '20 MAR 2009'
WHILE @date < '22 MAR 2009'
BEGIN
INSERT INTO @dates VALUES(@date)
SET @date = DATEADD(hour, 1, @date)
END
SELECT *
FROM
@dates
WHERE
dbo.timepart(date) BETWEEN '9:30' AND '17:30'
结果
date
-----------------------
2009-03-20 10:00:00.000
2009-03-20 11:00:00.000
2009-03-20 12:00:00.000
2009-03-20 13:00:00.000
2009-03-20 14:00:00.000
2009-03-20 15:00:00.000
2009-03-20 16:00:00.000
2009-03-20 17:00:00.000
2009-03-21 10:00:00.000
2009-03-21 11:00:00.000
2009-03-21 12:00:00.000
2009-03-21 13:00:00.000
2009-03-21 14:00:00.000
2009-03-21 15:00:00.000
2009-03-21 16:00:00.000
2009-03-21 17:00:00.000
关于sql - 如何在 SQL 中编写 where 子句来按一天中的时间过滤 DATETIME 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/710255/