【Oracle】【SQL】日期差返回几年、几个月、几天

xixuefeng Oracle, SQL&Function 2018-03-26 9:28:49 240 次浏览 【Oracle】【SQL】日期差返回几年、几个月、几天已关闭评论

【注】急脾气者,直接跳至SQL,以下均为废话

需求如题,这种需求在工作中并不算多,但往往系统为了让客户看着更直观,在页面上就算出来两个时间相差几年、几个月、几天的数值便于用户确认。

这两个天做一个数据迁移的工作,数据量不大,但数据质量较差,里面有大量的数据清洗的工作,其中就涉及到两个时间相差几年、几个月、几天的问题。因为这个时间差是存在数据库中的(原来系统存储的是手工写的,如:一年五个月,1年6个月,壹年,5个月等等,非常不标准,但好在两个时间都还在),所以,在清洗的时候通过两个时间计算出相差的差值。

数据库为Oracle,我们知道Oracle在时间处理上有很多函数,但没有一个函数能返回我们想要的信息。其实Oracle针对这个问题专门有几个数据类型

INTERVAL YEAR[ (years_precision)] TO MONTH
INTERVAL DAY[(days_precision)] TO SECOND[( seconds_precision)]

生产中这种数据类型用的很少,就算有类似的需求,就算这个数据类型比较合适,也会因为不常用而改用其他方式处理。

测试:

处理起来也不算复杂,大致思路如下:

1:通过months_between获取两个日期相差的月份数并trunc取整

2:总的相差的月份数除以12,再trunc取整,返回的即为相差的年数

3:通过两个时间相减可以返回天数,【结束时间】-(【开始时间】+【相差的月份数】)=【相差的天数】

4:通过【总的月份数】-(【相差年数】*12)]=【月份数】

利用with子句看着可能会更清楚一些

 

回顶部