postgresql 选择日期之间和一天中不同时间之间的数据

ffscu2ro  于 2023-01-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(134)

我想查询给定时间范围的行,并在一天中的给定时间之间进行筛选。
例如,我想过滤给定时间范围内每个日期的“9.00 AM”和“10.00 PM”之间的时间。
My table looks like this.
这是我的示例代码:

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'
AND name = 'SWU0001'
ORDER BY id DESC;

我已经选择了所需日期之间的数据,但我希望筛选特定时间。

a9wyjsp7

a9wyjsp71#

SELECT * 
FROM   public.energy 
WHERE  name = 'SWU0001'
AND    time >= date_trunc('month' , now() AT TIME ZONE 'Asia/Bangkok' - interval '1 month') AT TIME ZONE 'Asia/Bangkok' -- !
AND    time <  date_trunc('minute', now() AT TIME ZONE 'Asia/Bangkok' - interval '1 month') AT TIME ZONE 'Asia/Bangkok' -- !
AND    (time AT TIME ZONE 'Asia/Bangkok')::time BETWEEN '09:00' AND '22:00'  -- !!!
ORDER  BY id DESC;

不要将timestamptz列称为“time”,这个名称容易引起误解,它是一个基本类型名称。
此外,要使用“亚洲/曼谷”的当地时间,您需要在应用date_trunc()之前获取该时区的当地时间,并在最后将调整后的值转换回timestamptz

  • 在Rails和PostgreSQL中完全忽略时区

相关问题