我有公司表,每个公司都有自己的时区。 例如 - 公司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。
有什么建议我如何通过一个选择来决定这种情况?非常感谢。
答案 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;