gpt4 book ai didi

java - 如何在 org.hibernate.type.TimestampType 和 Oracle SYSDATE 之间进行转换?

转载 作者:行者123 更新时间:2023-12-02 01:06:34 28 4
gpt4 key购买 nike

我有一列使用 org.hibernate.type.TimestampType 在 hibernate 中映射。如何使用 native Oracle SQL 根据 Oracle TIMESTAMP 存储和检索这些值?

该列映射为 NUMBER(10)。我尝试使用一些我找到的 Unix 时间戳公式,但它们似乎没有产生正确的结果。

这是最近的时间戳:1579730473525这可能是过去 2-3 周内的某个日期(2020 年 1 月)。

详细信息

我想使用 Hibernate Envers 和 ValidityAuditStrategy。我遇到了麻烦,因为我将 Envers 应用于没有审核历史记录的现有记录数据库。我想做的是使用 Oracle SYSDATE 作为时间戳一次性插入审核数据。

最佳答案

我不确定您的号码 1579730473525 采用什么格式,因此我进行了猜测并使用 SUBSTR 获取前 10 位数字,结果是合理的 2020 年日期,如下所示。

SELECT TO_DATE('1970-01-01','YYYY-MM-DD') +
NUMTODSINTERVAL(TO_NUMBER(SUBSTR('1579730473525',1,10)), 'SECOND') FROM dual;

返回

22/01/2020 22:01:13              

然后为了获取 TIMESTAMP,我添加了最后 4 位数字。

SELECT to_char(TO_DATE('1970-01-01','YYYY-MM-DD') +
NUMTODSINTERVAL(TO_NUMBER(SUBSTR('1579730473525',1,10)), 'SECOND') ,'YYYY-MM-DD hh:mm:ss') ||'.'||SUBSTR('1579730473525',10,4)
FROM dual;

返回:

2020-01-22 10:01:13.3525         

(我找不到直接将 14 位数字转换回 YYYY-MM-DD hh:mm:ss:ff 格式的方法;它提示精度)

然后将数字转换为 TIMESTAMP 格式:

SELECT TO_TIMESTAMP(TO_CHAR(TO_DATE('1970-01-01','YYYY-MM-DD') +
NUMTODSINTERVAL(TO_NUMBER(SUBSTR('1579730473525',1,10)), 'SECOND') ,'YYYY-MM-DD hh:mi:ss') ||'.'||SUBSTR('1579730473525',10,4),'YYYY-MM-DD hh:mi:ss:ff')
FROM dual;

这将根据请求使用 Oracle SQL 在 Oracle TIMESTAMP 中返回它。

提示:如果您省略了格式设置,请记下您的 NLS 参数 NLS_TIMESTAMP_FORMAT,以防出现格式设置问题。

关于java - 如何在 org.hibernate.type.TimestampType 和 Oracle SYSDATE 之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59973990/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com