如何在 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 触发器中转换日期类型变量的时区的主要内容,如果未能解决你的问题,请参考以下文章
如何正确地转换成 java.util.Date 通过 JPA 的 Oracle 日期字段
oracle 中比较日期大小,日期定义的是varchar2类型的,比如'2011-10-21'