You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Oracle数据库中TIMESTAMP值从AEST转换为UTC的SQL查询语句

AEST转UTC的SQL查询方案

你的问题核心是输入的时间字符串没有时区标识,导致TO_UTC_TIMESTAMP_TZ无法正确解析。需要先将字符串转换为带AEST时区的时间戳,再转换为UTC时区,最后格式化输出。

方法一:使用TO_TIMESTAMP_TZ + SYS_EXTRACT_UTC

先解析字符串为AEST时区的时间戳,再提取UTC时间,最后格式化输出:

SELECT 
  TO_CHAR(
    SYS_EXTRACT_UTC(
      TO_TIMESTAMP_TZ('15/MAR/24 05:23:17.148565000 AM', 'DD/MON/RR HH:MI:SS.FF9 AM', 'NLS_DATE_LANGUAGE=ENGLISH')
    ),
    'DD/MON/RR HH:MI:SS.FF9 AM',
    'NLS_DATE_LANGUAGE=ENGLISH'
  ) AS utc_time
FROM DUAL;
  • TO_TIMESTAMP_TZ:按指定格式解析输入字符串,NLS_DATE_LANGUAGE=ENGLISH确保月份缩写(MAR)被正确识别
  • SYS_EXTRACT_UTC:从带时区的时间戳中提取UTC时间
  • TO_CHAR:将UTC时间格式化为你需要的输出样式

方法二:使用TO_TIMESTAMP_TZ + AT TIME ZONE

通过时区转换语法直接切换到UTC:

SELECT 
  TO_CHAR(
    TO_TIMESTAMP_TZ('15/MAR/24 05:23:17.148565000 AM', 'DD/MON/RR HH:MI:SS.FF9 AM', 'NLS_DATE_LANGUAGE=ENGLISH') 
    AT TIME ZONE 'UTC',
    'DD/MON/RR HH:MI:SS.FF9 AM',
    'NLS_DATE_LANGUAGE=ENGLISH'
  ) AS utc_time
FROM DUAL;

适配TO_UTC_TIMESTAMP_TZ的写法

如果一定要用TO_UTC_TIMESTAMP_TZ,需要在输入字符串中添加AEST的时区偏移(+10:00),并在格式串中包含时区标识:

SELECT 
  TO_CHAR(
    TO_UTC_TIMESTAMP_TZ('15/MAR/24 05:23:17.148565000 AM +10:00', 'DD/MON/RR HH:MI:SS.FF9 AM TZH:TZM', 'NLS_DATE_LANGUAGE=ENGLISH'),
    'DD/MON/RR HH:MI:SS.FF9 AM',
    'NLS_DATE_LANGUAGE=ENGLISH'
  ) AS utc_time
FROM DUAL;

注意事项

  • 如果涉及夏令时,建议使用时区名'Australia/Sydney'代替固定偏移+10:00,数据库会自动处理夏令时转换:
    TO_TIMESTAMP_TZ('15/MAR/24 05:23:17.148565000 AM', 'DD/MON/RR HH:MI:SS.FF9 AM', 'NLS_DATE_LANGUAGE=ENGLISH') 
    AT TIME ZONE 'Australia/Sydney'
    

内容的提问来源于stack exchange,提问作者Sudatta Dash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:04:54