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

Oracle中将GMT格式TIMESTAMP(6)转换为系统DATE的最优方法

简化Oracle审计表时间戳与系统日期的转换逻辑

传统审计表SYS.AUD$和统一审计表AUDSYS.AUD$UNIFIED中的时间戳均以无时区的TIMESTAMP(6)类型存储,且实际对应GMT/UTC时区时间。我们需要将其转换为DATE类型的系统本地时间,以匹配v$session.logon_time等多数字典视图的日期格式;同时也需要支持反向转换(系统日期转回UTC时间戳,无需保留小数秒)。

UTC时间戳转系统本地日期

无需通过日期差值计算,直接利用时区转换函数实现更直观的转换:

var_system_date := CAST(FROM_TZ(event_timestamp, 'UTC') AT LOCAL AS DATE);

说明:FROM_TZ将无时区的event_timestamp标记为UTC时区,AT LOCAL转换为数据库会话的本地时区,最后转为DATE类型。

系统本地日期转UTC时间戳

同样通过时区转换实现反向转换,无需小数秒的需求可直接通过CAST截断:

event_timestamp := CAST(FROM_TZ(CAST(var_system_date AS TIMESTAMP), SESSIONTIMEZONE) AT TIME ZONE 'UTC' AS TIMESTAMP);

说明:先将DATE类型转为无时区TIMESTAMP,再标记为会话本地时区,转换为UTC时区后,最终转为无时区的TIMESTAMP类型。

内容的提问来源于stack exchange,提问作者Paul W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:03:17