如何在指定日期范围内筛选每日特定时段的数据库数据
实现指定日期范围+每日特定时段的数据筛选
你只需要在现有WHERE条件里添加每日时段过滤的逻辑即可,这里提供两种精准的实现方式:
方式一:按小时范围筛选(适合只关注小时段的场景)
直接提取曼谷时区下的小时数,判断是否在9到22点之间:
SELECT * FROM public.energy WHERE -- 原有的日期范围条件 time >= date_trunc('month', NOW() - INTERVAL '1 MONTH') AT TIME ZONE 'Asia/Bangkok' AND time < date_trunc('MINUTE', NOW() - INTERVAL '1 MONTH') AT TIME ZONE 'Asia/Bangkok' -- 新增:每日9:00-22:00的小时范围(包含9点到22点整) AND EXTRACT(HOUR FROM time AT TIME ZONE 'Asia/Bangkok') BETWEEN 9 AND 22 AND name = 'SWU0001' ORDER BY id DESC;
方式二:精确到时分秒的筛选(适合需要严格匹配时段的场景)
直接提取时间部分进行区间判断,能精准匹配9:00:00到22:00:00的所有数据:
SELECT * FROM public.energy WHERE time >= date_trunc('month', NOW() - INTERVAL '1 MONTH') AT TIME ZONE 'Asia/Bangkok' AND time < date_trunc('MINUTE', NOW() - INTERVAL '1 MONTH') AT TIME ZONE 'Asia/Bangkok' -- 新增:精确匹配每日9:00:00至22:00:00的时段 AND TIME(time AT TIME ZONE 'Asia/Bangkok') BETWEEN '09:00:00' AND '22:00:00' AND name = 'SWU0001' ORDER BY id DESC;
关键注意点
一定要加上AT TIME ZONE 'Asia/Bangkok'再提取时间/小时,否则如果你的time字段带时区,会默认用服务器时区判断时段,导致结果不符合预期。
内容的提问来源于stack exchange,提问作者Stillx
相关产品推荐
相关产品推荐

