• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle查询优化日期运算实例详解

     加减日、月、年

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

    select a.hiredate 雇用日期,
        a.hiredate + 5 加5天,
        a.hiredate - 5 减5天,
        add_months(hiredate, 5) 加5个月,
        add_months(hiredate, -5) 减5个月,
        add_months(hiredate, 5 * 12) 加5年,
        add_months(hiredate, -5 * 12) 减5年
     from emp a where rownum =1;
    
    
    雇用日期 加5天 减5天 加5个月 减5个月 加5年 减5年
    ----------- ----------- ----------- ----------- ----------- ----------- -----------
    1980-12-17 1980-12-22 1980-12-12 1981-05-17 1980-07-17 1985-12-17 1975-12-17
    
    

    加减时、分、秒

    上面讲过,date可以直接加减天数,那么1/24就是一小时,分钟与秒的加减类同。

    select a.hiredate,
        a.hiredate - 5 / 24 / 60 / 60 减5秒,
        a.hiredate + 5 / 24 / 60 / 60 加5秒,
        a.hiredate - 5 / 24 / 60 减5分钟,
        a.hiredate + 5 / 24 / 60 加5分钟,
        a.hiredate - 5 / 24 减5小时,
        a.hiredate + 5 / 24 加5小时
     from emp a
     where rownum = 1;
    

    如果执行时,报错

    数据库服务器端的编码和客户端字符集编码不一致。

    我这边用的数据库西班牙语,不支持中文。

    日期间隔之时、分、秒

    SQL> select duration,
        duration * 24 间隔小时,
        duration * 24 * 60 间隔分钟,
        duration * 24 * 60 * 60 间隔秒
     from (select (max(a.hiredate) - min(a.hiredate)) as duration from emp a where
        a.ename in ('ALLEN', 'WARD')) x;
    
    
     DURATION    间隔小时    间隔分钟    间隔秒
    ---------- ---------- ---------- ----------
         2     48    2880   172800
    
    

    日期间隔之日、月、年

    加减月份用函数 add_months, 而计算月份间隔就要用函数months_between

    select max_hd - min_hd 间隔天,
        months_between(max_hd, min_hd) 间隔月,
        months_between(max_hd, min_hd) /12 间隔年
     from (select min(hiredate) min_hd, max(hiredate) max_hd from emp) x;
    
    
        间隔天    间隔月    间隔年
    ---------- ---------- ----------
       2348 77.1935483 6.43279569
    
    

    计算一年中周内各日期的次数

    问题

    计算一年中周内各日期(星期日、星期一 ……星期六)的次数。

    解决方案

    要计算一年中周内各日期分别有多少个,必须:

    1. 生成一年内的所有日期。
    2. 设置日期格式,得到每个日期对应为星期几。
    3. 计数周内各日期分别有多少个。
    with x as
     (select level lvl
      from dual
     connect by level =
           (add_months(trunc(sysdate, 'y'), 12) - trunc(sysdate, 'y')))
    select to_char(trunc(sysdate, 'y') + lvl - 1, 'DAY'), count(*)
     from x
     group by to_char(trunc(sysdate, 'y') + lvl - 1, 'DAY');
    

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • oracle 查询当天数据的sql条件写法
    • oracle使用to_date查询一周的第一天日期
    • Oracle查询最近几天每小时归档日志产生数量的脚本写法
    • oracle实现按天,周,月,季度,年查询排序方法
    • Oracle 获取上周一到周末日期的查询sql语句
    • Oracle中查询本月星期5的所有日期列表的语句
    • oracle查询截至到当前日期月份所在年份的所有月份
    • Oracle实现查询2个日期所跨过的月份列表/日期列表的方法分析
    • oracle实现动态查询前一天早八点到当天早八点的数据功能示例
    上一篇:oracle获取当前时间,精确到毫秒并指定精确位数的实现方法
    下一篇:oracle数据库密码到期怎么解决
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle查询优化日期运算实例详解 Oracle,查询,优化,日期,运算,