我在 Amazon Redshift 中有一个表,其中包含带有各种时区偏移的时间戳的 timestamptz 列。我需要将这些时间戳格式化为特定的 ISO 8601 格式。
详情:
列名称:timedte
当前格式示例:
'2024-08-26 23:09:11.949000 +05:55'
'2024-08-26 23:09:11.949000 +00:00'
所需格式示例:
'2024-08-26T23:09:12+0555' (for +05:55 offset)
'2024-08-26T23:09:12+0000' (for +00:00 offset)
要求:
对于非零时区偏移,请将输出格式设置为 YYYY-MM-DDTHH:MM:SS±HHMM(例如 2024-08-26T23:09:12+0555)。
对于零时区偏移 (UTC),请将输出格式设置为 YYYY-MM-DDTHH:MM:SS±0000(例如 2024-08-26T23:09:12+0000)。
问题:
我尝试了以下查询,但没有产生预期的结果:
sql
SELECT
to_char(timedte, 'YYYY-MM-DD"T"HH24:MI:SSOF') ||
LPAD(ABS(EXTRACT(TIMEZONE_HOUR FROM timedte::timestamptz))::TEXT, 2, '0') AS formatted_timedte
FROM t;
问题:
输出的格式不正确,尤其是在处理时区偏移时。
期望的结果:
我需要帮助制作正确的 SQL 查询,该查询可以格式化 timestamptz 列以匹配指定的 ISO 8601 格式。
任何指导或示例将不胜感激!
试试这个:
select to_char(timedte::timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') ||
replace(split_part(timedte, ' ', 3), ':', '')
as formatted_timedte
from t;
使用示例输入字符串之一('2024-08-26 23:09:11.949000 +05:55'),输出
2024-08-26T23:09:11+0555
我正在转换为时间戳(从而完全删除时区),并将时区视为字符串并将格式化版本连接到末尾。这是一种 hack-y,因为它没有完全使用日期或时间转换,但我在文档中没有看到任何支持你想要做的事情。
所以一般情况是:
select to_char(<timestamp_col>::timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') ||
replace(split_part(<timestamp_col>, ' ', 3), ':', '');