如何编写查询语句筛选指定起止时间范围内的timestamp类型数据
时间范围筛选查询语句实现方案
假设你的时间字段名为event_time,以下是不同主流数据库的实现写法:
MySQL
如果字段为时间类型(DATETIME/TIMESTAMP):
SELECT * FROM 你的表名 WHERE event_time >= '2021-09-20 10:00:00+00' AND event_time <= '2021-09-21 18:00:00+00';
如果字段为字符串存储的时间格式,先转时间类型再比较:
SELECT * FROM 你的表名 WHERE STR_TO_DATE(event_time, '%Y-%m-%d %H:%i:%s.%f+00') >= '2021-09-20 10:00:00' AND STR_TO_DATE(event_time, '%Y-%m-%d %H:%i:%s.%f+00') <= '2021-09-21 18:00:00';
PostgreSQL
字段为带时区的时间类型(TIMESTAMPTZ):
SELECT * FROM 你的表名 WHERE event_time >= '2021-09-20 10:00:00 UTC' AND event_time <= '2021-09-21 18:00:00 UTC';
SQL Server
SELECT * FROM 你的表名 WHERE event_time >= '2021-09-20 10:00:00 +00:00' AND event_time <= '2021-09-21 18:00:00 +00:00';
注意事项
- 所有筛选时间统一使用UTC时区匹配,避免时区转换误差导致筛选结果错误
- 若不需要包含结束时间边界,可把
<=替换为<,避免刚好落在18:00:00的记录不符合预期 - 若你使用的时区不是UTC,需先将筛选的起止时间转换为UTC时间再写入查询语句
内容的提问来源于stack exchange,提问作者Chanty Sok
相关产品推荐
相关产品推荐

