在 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);