问题描述
尝试从 pg_timezone_names
获取所有时区名称和偏移值,但很少有在分钟部分带有负号的偏移量。
这里是查询
select name,to_char(utc_offset,'HH24:MI' ),utc_offset
from pg_timezone_names
WHERE name LIKE '%Canada/Newfoundland%'
ORDER BY name;
结果是
如结果所示,偏移量 (-02:-30)
有一个负号。预期结果将是 -02:30
。 Postgres 中是否有任何可能的方法来格式化这样的偏移值?
解决方法
为什么不呢?:
select name,utc_offset::varchar,utc_offset
from pg_timezone_names
WHERE name LIKE '%Canada/Newfoundland%'
ORDER BY name;
name | utc_offset | utc_offset
---------------------+------------+------------
Canada/Newfoundland | -02:30:00 | -02:30:00
(1 row)
就您的目的而言,to_char()
距离结果很远。
既然结果集的长度总是一样的,为什么不直接用 substring
和 length
截断分钟?
SELECT name,substring(utc_offset::text,1,length(utc_offset::text)-3),utc_offset
FROM pg_timezone_names
WHERE name LIKE '%Canada/Newfoundland%'
ORDER BY name;
name | substring | utc_offset
---------------------------+-----------+------------
Canada/Newfoundland | -02:30 | -02:30:00
posix/Canada/Newfoundland | -02:30 | -02:30:00
(2 rows)