欢迎光临散文网 会员登陆 & 注册

Oracle查询优化改写技巧与案例 第七章 日期运算

2022-08-09 15:36 作者:泉来啦  | 我要投稿

7.1日期类型

        Oracle中常用的时间类型有两个:DATE和TIMESTAMP。

        DATE精度到秒,TIMESTAMP可以保存秒的小数:

        DATE类型相减得到的结果为整型,单位是天。

        TIMESTAMP类型相减或TIMESTAMP与DATE相减得到的结果类型是INTERVAL。

         DATE和TIMESTAMP两种类型加减一个数值得到的结果类型都是DATE:

7.2日期计算

        如上节所述,Oracle中日期可以直接进行计算,加1就是1天,那么1/24就是1小时,分与秒的加减类似:

7.3时间间隔类型

        如上节所述,TIMESTAMP与数值加减后得到的是DATE类型,损失了精度。如果要保留精度可以改用时间间隔类型(INTERVAL)处理,我们可以通过函数INTERVAL来得到间隔值:

        则当前时间加一天可写为:

        当然,DATE类型也可以通过INTERVAL进行计算,结果类型仍为DATE:

7.4日期计算函数

        在Oracle中,DATE类型可以直接加减天数,而加减月份要用add_months函数:

        月份加减需要注意的问题:

        如上所示,当计算上月同期时可能会重复计算28号的数据。

        同理,计算去年同期时也会发生重复计算的现象,而且因四年一遇更难发现:

        月份加减不能使用INTERVAL类型:

        因为没有2018-02-29,所以此时报错。

7.5间隔月份

        Oracle两个DATE相减的结果以天为单位,如果想得到间隔的月份需要使用函数:

        该函数同样有前面提到过的计算问题,使用的时候需要注意是否影响需求:

7.6获取记录间的间隔时间

        我们经常需要取记录间的间隔时间,比如公司想知道部门20招聘员工的间隔时间。JOINE与SMITH之间的间隔就是1981.04.02-1980.12.17。

        我们可以通过生成的序号来关联取值:

     也可以通过lag分析函数直接取得上一个记录的信息:

 

        lag和lead分别取前后的数据,如果记不住可以先看执行结果再决定用哪一个:


Oracle查询优化改写技巧与案例 第七章 日期运算的评论 (共 条)

分享到微博请遵守国家法律