Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 带时区的Postgres查询_Postgresql_Date_Timezone_Psql - Fatal编程技术网

Postgresql 带时区的Postgres查询

Postgresql 带时区的Postgres查询,postgresql,date,timezone,psql,Postgresql,Date,Timezone,Psql,我有一张公司表,每家公司都有各自的时区。 例如— 公司1的时区为UTC+10和 公司2-UTC+2 表公司有字段时区和存储的区域缩写,如美国/洛杉矶(如果需要,我可以为UTC的存储偏移值添加额外字段) 并且具有表请求,其中存储的时间戳不带时区(UTC-0) 例如— id |公司id |开始日期(utc-0) 1 21-03-16 02-00//为公司'21-03-16 12-00'添加` 2 21-03-16 23-00//为公司'22-03-16 01-00'添加` 3 1 20-03-16

我有一张公司表,每家公司都有各自的时区。 例如— 公司1的时区为UTC+10和 公司2-UTC+2

公司
有字段时区和存储的区域缩写,如
美国/洛杉矶
(如果需要,我可以为UTC的存储偏移值添加额外字段)

并且具有表请求,其中存储的时间戳不带时区(UTC-0) 例如—

id |公司id |开始日期(utc-0)
1 21-03-16 02-00//为公司'21-03-16 12-00'添加`
2 21-03-16 23-00//为公司'22-03-16 01-00'添加`
3 1 20-03-16 13-00//为公司'20-03-16 23-00'添加`
4 1 21-03-16 23-00//为公司'22-03-16 09-00'添加

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

但是如果我用-

从请求中选择*开始日期在“2016-03-21 00:00:00.000000”和“2016-03-21 23:59:59.99999”之间。

我收到id=2和4的请求

但这些请求是在2016年3月22日按事实为每家公司添加的


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

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

但我认为,与存储时区信息的
公司
合作应该可以解决这个问题:

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;

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

但我认为,与存储时区信息的
公司
合作应该可以解决这个问题:

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;

类似于请求。开始日期在时区公司。时区在'2016-03-21 00:00:00Z'和'2016-03-21 23:59:59.99999 Z'之间。
?OFC只有当每一行在
时区中有一个PostgreSQL接受的时区时,这才有效。您可以定义检查约束,如
检查((时区时区的时间戳'2000-01-01 00:00:00'不为空)
以验证
时区
。如
请求。开始日期在时区公司。时区介于'2016-03-21 00:00:00Z'和'2016-03-21 23:59:59.99999 Z'
?OFC只有当每一行在
时区中有一个PostgreSQL接受的时区时,这才有效。您可以定义检查约束,如
检查((时区时间戳'2000-01-01 00:00:00'不为空)
以验证
时区。