在Amazon Redshift中自定义时区偏移格式化timestamptz列
解决方案:Amazon Redshift timestamptz 转指定ISO 8601格式
针对你的需求,以下是正确的SQL查询,可同时处理毫秒四舍五入和时区偏移格式:
SELECT CONCAT( -- 四舍五入到秒后生成日期时间主体部分 TO_CHAR(ROUND(timedte::timestamp, 'SECOND'), 'YYYY-MM-DD"T"HH24:MI:SS'), -- 处理时区偏移:UTC输出+0000,非UTC去掉偏移中的冒号 CASE WHEN EXTRACT(TIMEZONE FROM timedte) = 0 THEN '+0000' ELSE REPLACE(TO_CHAR(timedte, 'OF'), ':', '') END ) AS formatted_timedte FROM t;
关键步骤说明:
- 毫秒四舍五入:
ROUND(timedte::timestamp, 'SECOND')将原时间戳的毫秒部分四舍五入到最近的秒,匹配你示例中11.949转为12的要求。 - 日期时间主体格式化:通过
TO_CHAR生成YYYY-MM-DDTHH:MM:SS格式的核心部分,把原格式的空格替换为ISO 8601要求的T。 - 时区偏移处理:
- 当时间戳为UTC时区(偏移为0)时,直接输出
+0000; - 非零时区用
TO_CHAR(timedte, 'OF')获取带符号的完整偏移(如+05:55),再通过REPLACE移除偏移中的冒号,得到+0555格式。
- 当时间戳为UTC时区(偏移为0)时,直接输出
原查询问题分析:
- 同时使用
OF格式符和手动拼接时区小时,导致偏移信息重复; - 未处理时区偏移中的分钟部分,也没有移除冒号;
- 缺少毫秒到秒的四舍五入逻辑,无法匹配示例中的秒数进位。
内容的提问来源于stack exchange,提问作者mahadev dhyani
相关产品推荐
相关产品推荐

