PostgreSQL 获取当前时区的结果
PostgreSQL get results in current time zone
如标题所述,我想查询 returns 我当前时区的时间戳值(甚至根据夏令时!)。
my_table 是:
|timestamp|name|value|property1|property2|
|---|---|---|---|---|
|2021-08-01 00:00:00+00|10|0.44|0|0|
|2021-08-01 00:05:00+00|15|0.76|0|0|
|2021-08-01 00:10:00+00|12|0.28|0|0|
(不要问我为什么我不能把这个 table 直接放在 markdown 中...可能是因为日期)
现在,例如,如果我现在必须 select 对应于我所在时区的一整天的 24 小时,我的解决方案是:
SELECT timestamp AT TIME ZONE 'CEST',name,value
FROM my_table
WHERE name IN (10,11,12)
AND timestamp BETWEEN '2021-08-01 00:00:00+02' AND '2021-08-02 00:00:00+02'
ORDER BY timestamp DESC
如您所见,此处存在问题:
- 我每次都要说明我是CEST还是CET(现在这里是CEST)
- 然后我必须在日期末尾添加 +02(或 CET 中的 +01)
有一种方法可以避免这种概念上的重复吗??任何改进查询的建议都值得赞赏
命令 SELECT version();
返回 PostgreSQL 12.7
适当设置会话的时区。
set timezone TO 'Europe/Berlin';
select '2021-08-01 00:00:00+00'::timestamptz;
timestamptz
------------------------
2021-08-01 02:00:00+02
select '2021-12-01 00:00:00+00'::timestamptz;
timestamptz
------------------------
2021-12-01 01:00:00+01
select '2021-08-01 00:00:00'::timestamptz;
timestamptz
------------------------
2021-08-01 00:00:00+02
您现在设置的会话时区是多少?
如标题所述,我想查询 returns 我当前时区的时间戳值(甚至根据夏令时!)。
my_table 是:
|timestamp|name|value|property1|property2|
|---|---|---|---|---|
|2021-08-01 00:00:00+00|10|0.44|0|0|
|2021-08-01 00:05:00+00|15|0.76|0|0|
|2021-08-01 00:10:00+00|12|0.28|0|0|
(不要问我为什么我不能把这个 table 直接放在 markdown 中...可能是因为日期)
现在,例如,如果我现在必须 select 对应于我所在时区的一整天的 24 小时,我的解决方案是:
SELECT timestamp AT TIME ZONE 'CEST',name,value
FROM my_table
WHERE name IN (10,11,12)
AND timestamp BETWEEN '2021-08-01 00:00:00+02' AND '2021-08-02 00:00:00+02'
ORDER BY timestamp DESC
如您所见,此处存在问题:
- 我每次都要说明我是CEST还是CET(现在这里是CEST)
- 然后我必须在日期末尾添加 +02(或 CET 中的 +01)
有一种方法可以避免这种概念上的重复吗??任何改进查询的建议都值得赞赏
命令 SELECT version();
返回 PostgreSQL 12.7
适当设置会话的时区。
set timezone TO 'Europe/Berlin';
select '2021-08-01 00:00:00+00'::timestamptz;
timestamptz
------------------------
2021-08-01 02:00:00+02
select '2021-12-01 00:00:00+00'::timestamptz;
timestamptz
------------------------
2021-12-01 01:00:00+01
select '2021-08-01 00:00:00'::timestamptz;
timestamptz
------------------------
2021-08-01 00:00:00+02
您现在设置的会话时区是多少?