Postgres查询与时区

时间:2017-03-24 12:34:38

标签: postgresql date timezone psql

我有公司表,每个公司都有自己的时区。 例如 - 公司1有时区UTC + 10和 公司2 - UTC + 2

companies具有字段time_zone并存储区域的缩写,如America/Los_Angeles(如果需要,我可以为UTC添加商店偏移值的附加字段)。

并且具有start_date字段的表请求,其中存储的TIMESTAMP没有时区(UTC-0) 例如 - id | company_id | start_date(utc-0) 1 1 21-03-16 02-00 // added for company `21-03-16 12-00` 2 2 21-03-16 23-00 // added for company `22-03-16 01-00` 3 1 20-03-16 13-00 // added for company `20-03-16 23-00` 4 1 21-03-16 23-00 // added for company `22-03-16 09-00

我希望选择从21-03-16 00-00到21-03-16 23-59的记录,考虑每个公司的时区。

但如果我会使用 -

select * from request where start_date between '2016-03-21 00:00:00.000000' AND '2016-03-21 23:59:59.999999'

我得到id = 2和4的请求。

但是这些请求实际上是为每家公司添加了22-03-16。

有什么建议我如何通过一个选择来决定这种情况?非常感谢。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,你可能需要澄清一下。

但我要说加入存储时区信息的companies可以解决问题:

SELECT r.*
FROM request r
   JOIN companies c ON c.id = r.company_id
WHERE r.start_date BETWEEN '2016-03-21 00:00:00.000000'
                           AT TIME ZONE c.time_zone
                       AND '2016-03-21 23:59:59.999999'
                           AT TIME ZONE c.time_zone;