如何解决PostgreSQL时区偏移量在分钟部分为负数`(-02:-30)`
尝试从 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。