在 PostgreSQL 中转换时间戳数组(不在 table 中)
Convert array of timestamps in PostgreSQL (not in a table)
我需要得到这个命令:
SELECT '2021-02-17 13:46:00'::timestamp AT TIME ZONE 'America/Denver' AT TIME ZONE 'Europe/Berlin'
, '2021-02-26 13:46:00'::timestamp AT TIME ZONE 'America/Denver' AT TIME ZONE 'Europe/Berlin'
为数组(或行)工作。原因是我有很多时间戳需要转换,如果我使用上面的结构,我最终会添加很多我的前端无法处理的列。
我目前的解决方案是将所有时间戳实际转储到 table 中,并使用 set timezone ='';
命令在我插入之前和我 select 之前设置不同的时区。由于我必须多久执行一次此请求,我想理想地为上述命令使用一个数组,这样我就不需要一个虚拟 table,但也不会将我的结果拆分成一个新的每个列。我试过 timezone()
函数,但那个函数也不喜欢数组。对于两者,我试图“告诉”psql 我正在使用 timestamptz []
的各种排列输入一个数组,但是 none 已经起作用了,我想知道这两种方法是否都不允许什么我要做什么?
或者,我也对行输出感到满意。
先谢谢大家了!
如果您不介意多行,那么这对您有用吗?
select ts::timestamp at time zone 'America/Denver' at time zone 'Europe/Berlin'
from unnest(array['2021-02-17 13:46:00','2021-02-26 13:46:00']) as u(ts);
如果需要数组:
select array_agg(ts::timestamp at time zone 'America/Denver' at time zone 'Europe/Berlin')
from unnest(array['2021-02-17 13:46:00','2021-02-26 13:46:00']) as u(ts);
我需要得到这个命令:
SELECT '2021-02-17 13:46:00'::timestamp AT TIME ZONE 'America/Denver' AT TIME ZONE 'Europe/Berlin'
, '2021-02-26 13:46:00'::timestamp AT TIME ZONE 'America/Denver' AT TIME ZONE 'Europe/Berlin'
为数组(或行)工作。原因是我有很多时间戳需要转换,如果我使用上面的结构,我最终会添加很多我的前端无法处理的列。
我目前的解决方案是将所有时间戳实际转储到 table 中,并使用 set timezone ='';
命令在我插入之前和我 select 之前设置不同的时区。由于我必须多久执行一次此请求,我想理想地为上述命令使用一个数组,这样我就不需要一个虚拟 table,但也不会将我的结果拆分成一个新的每个列。我试过 timezone()
函数,但那个函数也不喜欢数组。对于两者,我试图“告诉”psql 我正在使用 timestamptz []
的各种排列输入一个数组,但是 none 已经起作用了,我想知道这两种方法是否都不允许什么我要做什么?
或者,我也对行输出感到满意。
先谢谢大家了!
如果您不介意多行,那么这对您有用吗?
select ts::timestamp at time zone 'America/Denver' at time zone 'Europe/Berlin'
from unnest(array['2021-02-17 13:46:00','2021-02-26 13:46:00']) as u(ts);
如果需要数组:
select array_agg(ts::timestamp at time zone 'America/Denver' at time zone 'Europe/Berlin')
from unnest(array['2021-02-17 13:46:00','2021-02-26 13:46:00']) as u(ts);