如何在SQL Server中筛选时间部分非00:00:00.000的DATETIME数据
过滤SQL Server中时间部分非午夜0点的DATETIME行
要筛选出StartDate列中时间部分不为00:00:00.000的行,以下是几种实用且可靠的实现方法:
方法1:通过日期类型转换对比
将DATETIME转换为DATE类型剥离时间部分,再转回DATETIME(默认时间为午夜0点),与原字段值对比:
SELECT ID, StartDate FROM YourTableName WHERE StartDate <> CAST(CAST(StartDate AS DATE) AS DATETIME);
方法2:计算时间差判断
利用DATEDIFF计算原时间与当日午夜的毫秒差,差值大于0则说明时间部分非零:
SELECT ID, StartDate FROM YourTableName WHERE DATEDIFF(ms, CAST(StartDate AS DATE), StartDate) > 0;
方法3:直接提取时间部分对比(SQL Server 2008+)
使用CONVERT提取时间部分,直接与午夜时间字符串比较:
SELECT ID, StartDate FROM YourTableName WHERE CONVERT(TIME, StartDate) <> '00:00:00.0000000';
示例结果
执行以上任意查询后,将返回符合要求的行:
| ID | StartDate |
|---|---|
| 3 | 2025-06-13 00:03:30.000 |
| 4 | 2025-06-14 00:00:01.023 |
内容的提问来源于stack exchange,提问作者Stevoisiak
相关产品推荐
相关产品推荐

