【发布时间】:2017-08-17 09:37:39
【问题描述】:
我有每家公司都有各自时区的公司表。 例如 - 公司 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 的请求。
但事实上,这些请求是在 16 年 3 月 22 日为每个公司添加的。
有什么建议可以让我通过一个选择来决定这种情况吗?非常感谢。
【问题讨论】:
-
喜欢
request.start_date AT TIME ZONE companies.time_zone BETWEEN '2016-03-21 00:00:00Z' AND '2016-03-21 23:59:59.999999Z'?只有当每一行在time_zone中都有一个 PostgreSQL 接受的时区时,OFC 才会起作用。你可以定义一个检查约束,比如CHECK ((timestamp '2000-01-01 00:00:00' AT TIME ZONE time_zone) IS NOT NULL)来验证time_zone。
标签: postgresql date timezone psql