如何在 oracle 触发器中转换日期类型变量的时区

Posted

技术标签:

【中文标题】如何在 oracle 触发器中转换日期类型变量的时区【英文标题】:How to convert timezone of date type variable in oracle trigger 【发布时间】:2020-08-31 15:55:45 【问题描述】:

如果我有日期类型变量

date_time date := sysdate; -- Suppose the timezone is EST.

现在,如何将变量的时区转换为 UTC?

【问题讨论】:

您要更改值还是只更改时区?更多解释你真正想做的事情会有所帮助。 时区 (TZ) 与日期无关,甚至与时间戳无关。但是,它们可用于 TIMESTAMP WITH TIME ZONE 定义的列。这就是为什么下面的两个答案都显示 SYSTIMESTAMP,因为“返回系统日期,包括数据库所在系统的小数秒和时区” 【参考方案1】:

你可以试试这个:

SELECT SYSTIMESTAMP at time zone 'UTC' FROM DUAL;

【讨论】:

现在我如何将此查询的结果分配给date_time 变量? 您可以使用 pl/sql 块。 DECLARE ts VARCHAR2(50); BEGIN SELECT SYSTIMESTAMP at time zone 'UTC' INTO ts FROM DUAL; DBMS_OUTPUT.PUT_LINE(ts); END; / 如果它解决了问题,请考虑接受这个答案!【参考方案2】:

你的问题不是很清楚你到底需要什么,但如果我理解正确,你需要 UTC 时间

SELECT CAST(sys_extract_utc(SYSTIMESTAMP) AS TIME) FROM DUAL;

【讨论】:

现在我如何将此查询的结果分配给date_time 变量? 是的,您可以使用 into 子句进行分配。

以上是关于如何在 oracle 触发器中转换日期类型变量的时区的主要内容,如果未能解决你的问题,请参考以下文章