RedShift中CAST转换DATETIME到DATE的时区偏差问题求助
解决方案:GMT时间转DATE时避免时区偏差
核心问题是系统默认以EST时区解析GMT时间,导致跨天的GMT时间被转换为EST的次日日期。要强制按GMT时区计算日期,正确使用AT TIME ZONE即可解决:
推荐写法(明确指定原时区为GMT):
SELECT CAST(your_datetime_column AT TIME ZONE 'GMT' AT TIME ZONE 'GMT' AS DATE) AS gmt_date FROM your_table;逻辑说明:
- 第一个
AT TIME ZONE 'GMT':将系统视为EST的datetime值,转换为GMT时区的带时区时间类型 - 第二个
AT TIME ZONE 'GMT':将带时区的GMT时间转换为不带时区的GMT datetime - 最后
CAST AS DATE:按GMT时区提取日期,确保2022-12-02T22:00:00和2022-12-02T08:00:00都转为2022-12-02
- 第一个
替代写法(通过datetimeoffset中转):
SELECT CAST(CONVERT(datetimeoffset, your_datetime_column) AT TIME ZONE 'GMT' AS DATE) AS gmt_date FROM your_table;
之前的CAST/CONVERT/TRUNC无效是因为它们默认使用系统时区(EST)计算日期,而单次AT TIME ZONE操作没有完整完成时区的修正转换。
内容的提问来源于stack exchange,提问作者Caua Soares
相关产品推荐
相关产品推荐

