首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在org.hibernate.type.TimestampType和Oracle之间进行转换?

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

Stack Overflow用户
提问于 2020-01-29 19:10:14
回答 1查看 212关注 0票数 0

我有一个列,它在hibernate中使用org.hibernate.type.TimestampType映射。如何使用本机Oracle基于Oracle存储和检索这些值?

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

下面是最近的一个时间戳:1579730473525,这应该是最近2-3周(2020年1月)的某个日期。

详细信息

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 10:56:49

我不知道你的数字1579730473525是什么格式,所以我猜了一下,用SUBSTR取了前10位数字,结果是一个合理的2020年日期如下。

代码语言:javascript
运行
复制
SELECT TO_DATE('1970-01-01','YYYY-MM-DD') +
NUMTODSINTERVAL(TO_NUMBER(SUBSTR('1579730473525',1,10)), 'SECOND') FROM dual;

返回

代码语言:javascript
运行
复制
22/01/2020 22:01:13              

然后,为了得到TIMESTAMP,我添加了最后4位数字。

代码语言:javascript
运行
复制
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;

这个结果是:

代码语言:javascript
运行
复制
2020-01-22 10:01:13.3525         

(我找不到一种直接将14位数字转换回YYYY DD:mm:ss:ff格式的方法;它抱怨精确度)

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

代码语言:javascript
运行
复制
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,以防出现格式化问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59973990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档