• oracle 日期


    日期加减

    Oracle中日期进行加减可以使用多种方式,以下介绍三种
    一种是针对天的操作,适用于对日,时,分,秒的操作,
    一种是对月的操作,适用于月,年的操作,
    一种是使用INTERVAL函数,适用于年,月,日,时,分,秒的操作

    直接加减数字

    • 加一天
    select sysdate "当前时间",sysdate+1 "当前时间加一天" from dual ;
    
    • 1

    结果:

    2023-11-02 17:09:46	|	2023-11-03 17:09:46
    
    • 1

    灵活使用

    SELECT
        SYSDATE "当前时间",
        SYSDATE + 1 "加一天",
        SYSDATE + (1 / 24) "加一小时",
        SYSDATE + (1 / 24 / 60) "加一分钟",
        SYSDATE + (1 / 24 / 60 / 60) "加一秒钟",
        SYSDATE - 1 "减一天"
    FROM
        dual;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果:

    2023-11-02 17:14:41	|	2023-11-03 17:14:41	|	2023-11-02 18:14:41	|	2023-11-02 17:15:41	|	2023-11-02 17:14:42	|	2023-11-01 17:14:41
    
    • 1

    通过ADD_MONTHS()函数

    • 加一个月
    select sysdate "当前时间",ADD_MONTHS(sysdate, 1) "加一月" from dual ;
    
    • 1

    结果

    2023-11-02 17:18:31	|	2023-12-02 17:18:31
    
    • 1

    灵活使用

    SELECT
        SYSDATE "当前时间",
        ADD_MONTHS (SYSDATE, 1) "加一月",
        ADD_MONTHS (SYSDATE, - 1) "减一月",
        ADD_MONTHS (SYSDATE, 1 * 12) "加一年",
        ADD_MONTHS (SYSDATE, - 1 * 12) "减一年"
    FROM
        dual;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果:

    2023-11-02 17:20:09	2023-12-02 17:20:09	2023-10-02 17:20:09	2024-11-02 17:20:09	2022-11-02 17:20:09
    
    • 1

    使用INTERVAL函数

    语法:INTERVAL ‘时间差数值’ { YEAR | MONTH | DAY | HOUR | MINUTE | SECODE} (精度数值)

    得出的是相应类型的时间差,注意精度数值范围是1-9,不写默认值是2,精度不匹配时间差数值会报错
    例如:当前时间加1,11,111年

    SELECT
        SYSDATE "当前时间",
        SYSDATE + INTERVAL '1' YEAR "加1年",          -- 精度数值不写时是默认两位,此处可以写精度为1-9
        SYSDATE + INTERVAL '11' YEAR "加11年",        -- 此处可以不写,可以是1-9
        SYSDATE + INTERVAL '11' YEAR(2) "加11年",     -- 可以写2-9
        SYSDATE + INTERVAL '111' YEAR(3) "加111年",   -- 此处必须写精度,精度值3-9
        SYSDATE + INTERVAL '111' YEAR (9) "加111年"   -- 精度值可以大于当前精度,不能小于当前数值精度,不能超过9
    FROM
        dual;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果:

    2023-11-02 17:22:22	2024-11-02 17:22:22	2034-11-02 17:22:22	2034-11-02 17:22:22	2134-11-02 17:22:22	2134-11-02 17:22:22
    
    • 1

    灵活运用

    SELECT
        SYSDATE "当前时间",
        SYSDATE + INTERVAL '1' YEAR "加一年",
        SYSDATE + INTERVAL '-1' YEAR "减一年",
        SYSDATE + INTERVAL '1' MONTH "加一月",
        SYSDATE + INTERVAL '1' DAY "加一天",
        SYSDATE + INTERVAL '1' HOUR "加一小时",
        SYSDATE + INTERVAL '1' MINUTE "加一分钟",
        SYSDATE + INTERVAL '1' SECOND "加一秒"
    FROM
        dual;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果

    2023-11-02 17:25:31	2024-11-02 17:25:31	2022-11-02 17:25:31	2023-12-02 17:25:31	2023-11-03 17:25:31	2023-11-02 18:25:31	2023-11-02 17:26:31	2023-11-02 17:25:32
    
    • 1

    精度的使用同上,当然oracle数据库对于时间大小也是有限制的,年份范围是 -4713 和 +9999 之间, 且不为 0

    计算两个日期间隔的天数、月数和年数

    天数

    在Oracle中,两个日期直接相减,便可以得到天数;

    select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/dd/yyyy') from dual;
    
    返回结果:36
    
    • 1
    • 2
    • 3

    月数

    计算月数,需要用到months_between函数;

    --months_between(date1,date2)   
    --如果两个日期中“日”相同,或分别是所在月的最后一天,那么返回的结果是整数。否则,返回的结果将包含一个分数部分(以31天为一月计算)     
    select months_between(to_date('01/31/2015','mm/dd/yyyy'),to_date('12/31/2014','mm/dd/yyyy')) "MONTHS" FROM DUAL;      
    返回结果: 1    
    
    select months_between(to_date('01/01/2015','mm/dd/yyyy'),to_date('12/31/2014','mm/dd/yyyy')) "MONTHS" FROM DUAL;      
    返回结果: 0.032258064516129
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    select abs(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
    select ceil(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
    select floor(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
    
    • 1
    • 2
    • 3

    年数

    计算年数,是通过计算出月数,然后再除以12;(也许会有更好的办法,目前还不知道)

    select trunc(months_between(to_date('08/06/2015','mm/dd/yyyy'),to_date('08/06/2013','mm/dd/yyyy'))/12) from dual;
    
    --返回结果:2
    
    • 1
    • 2
    • 3

    相差小时数、分钟数、秒数

    Oracle中两个日期相差小时数

    select TO_NUMBER((TO_DATE('2018-6-5 12:00:00','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-6-4 00:00:00','yyyy-mm-dd hh24:mi:ss'))*24) AS 相差小时数 from dual;
    
    • 1

    Oracle中两个日期相差分钟数

    select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60) AS 相差分钟数 from dual;
    
    • 1

    Oracle中两个日期相差秒数

    select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60*60) AS 相差秒数 from dual;
    
    • 1
  • 相关阅读:
    ai绘画部署教程
    ShardingSphere学习(超详细)
    P7071 [CSP-J2020] 优秀的拆分
    Android14 WMS启动流程
    03 里氏替换原则
    网络分析笔记05:解析TCP/IP的链路层
    一个注解解决ShardingJdbc不支持复杂SQL
    受众分析与卸载分析全面升级,HMS Core分析服务6.6.0版本上新
    有关微信小程序如何使用mathjs
    Go用两个协程交替打印100以内的奇偶数
  • 原文地址:https://blog.csdn.net/strggle_bin/article/details/134187046