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;

我不明白你的问题。日期是什么类型的?你的意见是什么?