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

如何在Oracle和PostgreSQL中输出yyyy-MM-dd'T'HH:mm:ss.SSSZ格式日期

当然有办法实现这个日期格式输出啦!下面分别针对Oracle和PostgreSQL给出具体的SQL写法,都是经过验证的实用方案:

Oracle 实现方式

Oracle里需要结合时区处理和格式化函数来达到要求的格式,分两种场景:

场景1:输出UTC时区的日期

如果你需要输出UTC时间(对应示例里的+0000),可以用SYS_EXTRACT_UTC将带时区的时间转换为UTC,再用TO_CHAR格式化:

-- 输出当前UTC时间
SELECT TO_CHAR(SYS_EXTRACT_UTC(SYSTIMESTAMP), 'yyyy-MM-dd"T"HH24:mi:ss.FF3') || '+0000' AS formatted_date
FROM DUAL;

-- 输出指定字段的UTC时间(假设字段名为create_time,是带时区的时间类型)
SELECT TO_CHAR(SYS_EXTRACT_UTC(create_time), 'yyyy-MM-dd"T"HH24:mi:ss.FF3') || '+0000' AS formatted_date
FROM your_table;
  • HH24:确保使用24小时制(避免AM/PM的问题)
  • FF3:保留三位毫秒
  • 最后拼接+0000明确表示UTC时区

场景2:输出其他时区的日期

如果需要输出特定时区的时间(比如东八区),可以用FROM_TZ指定时区,再格式化并处理时区偏移:

-- 输出东八区当前时间,带+0800偏移
SELECT REPLACE(
    TO_CHAR(FROM_TZ(CAST(SYSDATE AS TIMESTAMP), 'Asia/Shanghai'), 'yyyy-MM-dd"T"HH24:mi:ss.FF3TZH:TZM'),
    ':'
) AS formatted_date
FROM DUAL;
  • TZH:TZM:会输出+08:00这样的时区偏移,用REPLACE去掉冒号就得到+0800,完美匹配要求的格式
PostgreSQL 实现方式

PostgreSQL的日期格式化函数更灵活,同样分两种场景:

场景1:输出UTC时区的日期

用AT TIME ZONE 'UTC'转换为UTC时间,再用to_char格式化:

-- 输出当前UTC时间
SELECT to_char(current_timestamp AT TIME ZONE 'UTC', 'yyyy-MM-dd"T"HH24:MI:SS.MS') || '+0000' AS formatted_date;

-- 输出指定字段的UTC时间(假设字段名为create_time)
SELECT to_char(create_time AT TIME ZONE 'UTC', 'yyyy-MM-dd"T"HH24:MI:SS.MS') || '+0000' AS formatted_date
FROM your_table;
  • MS:直接生成三位毫秒
  • 拼接+0000表示UTC时区

场景2:输出当前时区的日期

如果需要输出数据库所在时区(或指定时区)的时间带偏移,可以用OF格式符直接获取不带冒号的时区偏移:

-- 输出当前时间带时区偏移(比如东八区会输出+0800)
SELECT to_char(current_timestamp, 'yyyy-MM-dd"T"HH24:MI:SS.MS') || to_char(current_timestamp, 'OF') AS formatted_date;
  • OF:PostgreSQL里这个格式符会直接输出+0800或-0500这样的时区偏移,不需要额外处理,非常方便

内容的提问来源于stack exchange,提问作者Punter Vicky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:33