我有一个列,它在hibernate中使用org.hibernate.type.TimestampType
映射。如何使用本机Oracle基于Oracle存储和检索这些值?
该列映射为NUMBER(10)
。我尝试使用我为Unix时间戳找到的一些公式,但它们似乎没有产生正确的结果。
下面是最近的一个时间戳:1579730473525
,这应该是最近2-3周(2020年1月)的某个日期。
详细信息
我想在ValidityAuditStrategy
中使用Hibernate Envers。我遇到了麻烦,因为我正在将Envers应用到一个没有审计历史的现有记录数据库中。我要做的是使用Oracle作为时间戳,一次性插入审计数据。
发布于 2020-02-07 10:56:49
我不知道你的数字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 DD: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在Oracle请求中返回它。
只是一个提示:如果您忽略了格式设置,请记下NLS参数NLS_TIMESTAMP_FORMAT,以防出现格式化问题。
https://stackoverflow.com/questions/59973990
复制相似问题