Postgres选择跨时区特定日

时间:2016-02-21 18:25:58

标签: postgresql

我有两个表(订单和地区),当加入时返回

orders.date        | orders.regions.tz
--------------------------------------
2016-01-01 2:00:00 | PST
2016-01-01 2:00:00 | EST
2016-01-01 2:00:00 | EST
...

我可以使用以下选项在相应的时区中选择不同的时间:

SELECT date::timestamp at time zone regions.tz 
FROM orders INNER JOIN regions ON orders.region_id = regions.id;

现在我正试图找到一种方法来选择特定日期的所有订单。那就是:

  • 太平洋标准时间2016年1月1日凌晨00:00(太平洋标准时间)和2016年1月2日太平洋标准时间(太平洋标准时间)之间的PST地区订单
  • 美国东部标准时间2016年1月1日凌晨1点至2016年1月2日美国东部时间上午12点之间的EST地区的订单。
  • ...

我猜这将依赖于without timezone and time的某种使用,但我不确定如何继续。

2 个答案:

答案 0 :(得分:1)

你最好的选择可能是::date

SELECT orders.*
FROM orders INNER JOIN regions ON orders.region_id = regions.id
WHERE (scheduled::timestamp at time zone regions.tz)::date = '2016-1-1'::date;

答案 1 :(得分:0)

虽然我不知道这是否是最有效的做事方式,但这可以通过一堆OR声明完成。

SELECT date::timestamp at time zone regions.tz 
FROM orders INNER JOIN regions ON orders.region_id = regions.id
WHERE (date::timestamp BETWEEN startTime AND endTime AND regions.tz = 'PST')
OR (date::timestamp BETWEEN startTime AND endTime AND regions.tz = 'EST')

你当然必须弄清楚每个时区的所有开始和结束时间。