postgresql - 带时区的 Postgres 查询

标签 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 为每个公司添加的。

有什么建议我可以通过一次选择来决定这种情况吗?非常感谢。

最佳答案

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

但我想说加入存储时区信息的 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;

关于postgresql - 带时区的 Postgres 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42999657/

相关文章:

node.js - 在 where 子句中对 hasMany 关联的属性进行后续过滤

postgresql - 为什么gorm postgresql在“)”处或附近抛出pq:语法错误?

javascript - 如何更改react-intl中日期的显示格式?

javascript - 根据 3 个位置的当前时间更改 3 个背景图像

sql - 获取时区时间

postgresql - 用户 postgres 启动使所有 CPU 100% 使用的进程

sql - 使用 Read Committed 隔离级别,SELECT 能否在一个事务中得到不同的结果?

java - 为什么 Calendar.setTimeZone() 不会影响从数据库检索的日期

javascript - javascript 中的新数据返回不同的日期

rest - 将 Sharepoint TimeZone 信息转换为 Java TimeZone