"景先生毕设|www.jxszl.com

Oracle日期加减,Oracle日期时间差

2023-01-19 16:16编辑: www.jxszl.com景先生毕设

Oracle日期加减,Oracle日期时间差


一、Oracle日期加减
一种是针对天的操作,适用于对日,时,分,秒的操作,
一种是对月的操作,适用于月,年的操作,
一种是使用INTERVAL函数,适用于年,月,日,时,分,秒的操作

1.直接加减数字
加一天
 select sysdate "当前时间",sysdate+1 "当前时间加一天" from dual ;


灵活使用
SELECT
    SYSDATE "当前时间",
    SYSDATE + 1 "加一天",
    SYSDATE + (1 / 24) "加一小时",
    SYSDATE + (1 / 24 / 60) "加一分钟",
    SYSDATE + (1 / 24 / 60 / 60) "加一秒钟",
    SYSDATE - 1 "减一天"
FROM
    dual;
查询结果如下:


2.通过ADD_MONTHS()函数
加一个月
select sysdate "当前时间",ADD_MONTHS(sysdate, 1) "加一月" from dual ;


灵活使用
SELECT
    SYSDATE "当前时间",
    ADD_MONTHS (SYSDATE, 1) "加一月",
    ADD_MONTHS (SYSDATE, - 1) "减一月",
    ADD_MONTHS (SYSDATE, 1 * 12) "加一年",
    ADD_MONTHS (SYSDATE, - 1 * 12) "减一年"
FROM
    dual;
查询结果如下:
       当前时间    加一月    减一月    加一年    减一年
    2023-01-19 16:11:39    2023-02-19 16:11:39    2022-12-19 16:11:39    2024-01-19 16:11:39    2022-01-19 16:11:39


3.使用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年    加11年    加11年    加111年    加111年
    2023-01-19 16:10:30    2024-01-19 16:10:30    2034-01-19 16:10:30    2034-01-19 16:10:30    2134-01-19 16:10:30    2134-01-19 16:10:30

灵活运用
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;
结果如下:

       当前时间    加一年    减一年    加一月    加一天    加一小时    加一分钟    加一秒
    2023-01-19 16:11:23    2024-01-19 16:11:23    2022-01-19 16:11:23    2023-02-19 16:11:23    2023-01-20 16:11:23    2023-01-19 17:11:23    2023-01-19 16:12:23    2023-01-19 16:11:24

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


二、Oracle日期时间差
  1.获取两时间的相差豪秒数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差豪秒数 FROM DUAL;

查询结果:
       相差豪秒数
    86401000
 

2.获取两时间的相差秒数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60) 相差秒数 FROM DUAL;

查询结果:       
    相差秒数
    86401

 


3.获取两时间的相差分钟数

select ceil(((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss'))) * 24 * 60)  相差分钟数 FROM DUAL;

查询结果:
       相差分钟数
    1441
 


4.获取两时间的相差小时数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24)  相差小时数 FROM DUAL;

查询结果:
        相差小时数
    25


5.获取两时间的相差天数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')))  相差天数 FROM DUAL;

查询结果:

        相差天数
    2


6.获取两时间月份差

select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 +

       EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) months

from dual;

查询结果:       
     MONTHS
    13
 


7.获取两时间年份差

select EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd')) years from dual;

查询结果:

       YEARS
    1



原文链接:http://www.jxszl.com/biancheng/shujuku/165584.html