如何从带Z后缀的Timestamp中提取小时?解决hour函数报错
解决PostgreSQL提取带时区时间戳小时的报错问题
问题原因
PostgreSQL中没有直接支持timestamp with time zone类型的hour()函数,你遇到的报错就是因为传入的参数类型不匹配。
两种可行解决方案
- 使用
EXTRACT函数提取小时:
SELECT EXTRACT(HOUR FROM '2022-11-25T17:54:29.819Z'::timestamp with time zone);
执行后会返回数值类型的小时数(示例中为17)。
- 使用
DATE_PART函数提取小时:
SELECT DATE_PART('hour', '2022-11-25T17:54:29.819Z'::timestamp with time zone);
该函数与EXTRACT功能一致,同样返回数值型的小时结果。
额外:时区转换后提取小时
如果需要提取指定时区下的小时数,可以先转换时区再提取,比如转换为东八区(Asia/Shanghai):
SELECT EXTRACT(HOUR FROM '2022-11-25T17:54:29.819Z'::timestamp with time zone AT TIME ZONE 'Asia/Shanghai');
示例中UTC时间17:54转换为东八区是次日01:54,执行后会返回1。
内容的提问来源于stack exchange,提问作者altwhatever
相关产品推荐
相关产品推荐

