Oracle SQL如何编写WHERE条件筛选带时分的日期数据
实现方法
仅存储日期值、没有录入时分信息的记录,数据库会自动将时间部分填充为00:00:00,只要排除时间部分为零点的记录,就能筛出同时带日期、小时、分钟完整信息的条目。
边界提示:如果业务场景下
00:00本身是合法的带时分的有效数据(比如凌晨零点的操作记录),这个判断逻辑会误过滤这类数据。这种情况建议在数据录入环节新增独立标记位标识是否录入了时分信息,不要靠存储的时间值反推。
各常用数据库的WHERE子句写法
- MySQL / MariaDB
用TIME()函数提取字段的时间部分做判断即可:
也可以用格式化函数提取时分部分判断:SELECT * FROM 目标表 WHERE TIME(日期字段名) != '00:00:00'WHERE DATE_FORMAT(日期字段名, '%H:%i') != '00:00' - PostgreSQL
将字段转换为time类型后比对:SELECT * FROM 目标表 WHERE 日期字段名::time != '00:00:00' - SQL Server
用类型转换提取时间部分判断:SELECT * FROM 目标表 WHERE CONVERT(TIME, 日期字段名) != '00:00:00' - Oracle
用TRUNC()函数截断到日期粒度,和原值不相等就说明带时分信息:SELECT * FROM 目标表 WHERE 日期字段名 != TRUNC(日期字段名)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

