我有两个表(订单和地区),当加入时返回
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;
现在我正试图找到一种方法来选择特定日期的所有订单。那就是:
我猜这将依赖于without timezone and time
的某种使用,但我不确定如何继续。
答案 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')
你当然必须弄清楚每个时区的所有开始和结束时间。