如何在 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 触发器中转换日期类型变量的时区的主要内容,如果未能解决你的问题,请参考以下文章

CDateTimeCtrl类型的日期如何比较大小

如何正确地转换成 java.util.Date 通过 JPA 的 Oracle 日期字段

将oracle日期分配给SSIS变量

oracle 中比较日期大小,日期定义的是varchar2类型的,比如'2011-10-21'

如何把ORACLE数据库BLOB类型转换成SQL的TEXT类型。

Oracle数据库中如何将字符串格式化为日期