oracle进行时间间隔计算格式报错或计算精度错误问题

        做数据分析时经常遇到甚至说大部分场景需要计算相关时间的间隔,对oracle数据库进行SQL查询时因为数据库字段结构经常会遇见数据格式不统一或其他问题造成的字段报错或者计算结果不是预期数据。

        用我之前遇到过的例子做个演示,采用ceil语句进行时间间隔分钟查询计算:

SELECT CEIL (SYSDATE - MIN_CHANGED)*24*60,
       SYSDATE,
       MIN_CHANGED
FROM XXXXXXX

未进行*24*60计算输出结果:

进行*24*60计算输出结果: 

         可以看出因为日期字段不一致,输出了一个以天数单位的间隔日期,按照预期如果需要计算分秒精度,则需要对字段进行格式变换,标准写法方式如下:

SELECT CEIL (TO_DATE(SYSDATE,'YYYY-MM-DD HH24:MI:SS') -
             TO_DATE(MIN_CHANGED,'YYYY-MM-DD HH24:MI:SS'))*24*60,
       SYSDATE,
       MIN_CHANGED
FROM XXXXXXX

        运行结果报错:ORA-01861:文字与格式字符串不匹配,采用对字段进行字符串格式转换后

SELECT CEIL (TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') -
             TO_DATE(TO_CHAR(MIN_CHANGED,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS'))*24*60,
       SYSDATE,
       MIN_CHANGED
FROM XXXXXXX

输出结果与之前一致,仍然是按照天为单位计算的结果,不再重新截图,更多时候这种转换方式会遇到报错:ORA-01830:日期格式图片在转换整个输入字符串之前结束。

综上:如过DATE格式字段下存储‘YYYY-MM-DD'和’YYYY/MM/DD‘或者直接按照时间日期格式填写数据,最后在调用数据时都会出现字段格式报错或计算结果达不到预期使用效果。

        针对该问题出现场景,建议先对字段进行字符串转换,然后转换标准时间日期格式后进行间隔计算,之后将计算结果转换为数字格式(因为oracle默认时间按照天进行运算,转换为数字后保留精度对需要的小时、分钟、秒等进行计算),根据最终需要可选择使用round进行取整或其它方式使用计算结果。

SELECT ROUND(TO_NUMBER(TO_DATE(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS')-
TO_DATE(TO_CHAR(MIN_CHANGED,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS'))*24*60) 分钟计算,
       SYSDATE,
       MIN_CHANGED
FROM XXXXXXX

计算结果:

 注:
---*24*60 分钟
---*24 小时
---直接ROUND 天

---如有其它应用,可直接保留数字计算结果即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修己带你看数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值