You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2017中如何按非整点时间筛选datetime字段记录

筛选SQL Server datetime字段的时分秒部分

在SQL Server 2017中,针对datetime类型字段systime,要忽略日期部分、仅按具体时分秒筛选记录(比如筛选17:30及之后、或19:25及之前的记录),以下是几种实用方法:

方法1:转换为TIME类型直接比较

这是最直观简洁的方式,将datetime字段转换为TIME类型后,直接和目标时间字符串对比:

-- 筛选17:30及之后的记录
SELECT *
FROM myTable
WHERE CAST(systime AS TIME) >= '17:30:00'

-- 筛选19:25及之前的记录
SELECT *
FROM myTable
WHERE CAST(systime AS TIME) <= '19:25:00'

TIME类型仅保留时分秒信息,自动忽略日期部分,因此可以直接进行时间范围判断。

方法2:计算总分钟数对比

通过DATEPART提取小时和分钟,转换为当日总分钟数后进行数值比较:

-- 17:30 转换为总分钟数:17*60 + 30 = 1050
SELECT *
FROM myTable
WHERE DATEPART(HOUR, systime)*60 + DATEPART(MINUTE, systime) >= 1050

-- 19:25 转换为总分钟数:19*60 +25 = 1165
SELECT *
FROM myTable
WHERE DATEPART(HOUR, systime)*60 + DATEPART(MINUTE, systime) <= 1165

如果需要精确到秒,只需再加上DATEPART(SECOND, systime)/60.0即可实现更细致的筛选。

方法3:计算当日时间间隔

通过DATEDIFF计算当前时间与当日凌晨的时间差,再和目标时间的时间差对比:

-- 17:30 距离当日凌晨的秒数:17*3600 +30*60 = 63000
SELECT *
FROM myTable
WHERE DATEDIFF(SECOND, CAST(CAST(systime AS DATE) AS DATETIME), systime) >= 63000

这种方式适合需要基于时间间隔做复杂逻辑判断的场景。

测试验证

用你提供的示例值测试:比如2015-05-20 18:23:49.000转换为TIME后是18:23:49,会被>= '17:30:00'和<= '19:25:00'的条件同时命中;而2015-08-30 21:34:52.000只会被>= '17:30:00'的条件选中。

内容的提问来源于stack exchange,提问作者dnk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:55:13