sql - 如何在 SQL 中编写 where 子句来按一天中的时间过滤 DATETIME 列?

标签 sql sql-server

我有带有 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/

相关文章:

sql - 将结果缩减为累积组

mysql - 查找多个列和表中的重复条目

sql - SQL连接中约束放置的性能差异

sql - PostgreSQL 许多 jsonb 列与许多行

php - 如何摆脱 � 使用 php

sql-server - SSRS - Visual Studio - 如何使用现有的共享数据源

sql-server - Protractor 查询 SQL Server 数据库 (MSSQL)

sql-server - 复合 vs 代理主键

sql - 在 SQL 表上插入数据...找不到数据

sql-server - SQL 无法绑定(bind)多部分标识符 "c.clerkID"