Postgresql Postgres跨时区选择特定日期
我有两个表(订单和区域),它们在连接时返回Postgresql Postgres跨时区选择特定日期,postgresql,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
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日凌晨12:00至2016年1月2日凌晨12:00之间太平洋标准时间地区的订单
- 2016年1月1日美国东部时间上午12:00至2016年1月2日美国东部时间上午12:00之间的东部地区订单
我猜这将依赖于某种不带时区和时间的
的使用,但我不确定如何进行。虽然我不知道这是否是最有效的方法,但这可以通过一系列或多个条件来实现
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')
当然,您必须计算出每个时区的所有开始和结束时间。您最好的选择可能是投到::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;
我不明白你的问题。日期是什么类型的?你的意见是什么?