oracle时间相关函数

oracle数据库

1、获取当前时间

select sysdate() from dual;

2、加减某个时间间隔

select sysdate+ 1/24 from dual;

sysdate+ 1表示时间加一天,1/24表示时间加一小时;

select sysdate, add_months(sysdate,4) from dual;--增加4个月

select sysdate, add_months(sysdate,12*4) from dual;--增加4年

对当前时间作减法,直接在数字前加上‘-"即可。

DM7 和SQL Server 也可以用dateadd(datepart,number,date)函数进行时间加减

当前时间减去7分钟的时间

select sysdate,sysdate - interval '7' minute from dual;

当前时间减去7小时的时间

select sysdate - interval '7' hour from dual;

当前时间减去7天的时间

select sysdate - interval '7' day from dual;

当前时间减去7月的时间

select sysdate,sysdate - interval '7' month from dual;

当前时间减去7年的时间

select sysdate,sysdate - interval '7' year from dual;

时间间隔乘以一个数字

select sysdate,sysdate - 8*interval '7' hour from dual;

3、日期相减

注:oracle时间差是以天数为单位,所以换算成年月,日

获取两个日期间的天数

select floor(sysdate - to_date(‘20220405’,‘yyyymmdd’)) from dual;

  select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual        //时间差-年


  select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual        //时间差-月


  select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual             //时间差-天


  select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual         //时间差-时


  select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual    //时间差-分


  select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual   //时间差-秒

月份差

 a_date between to_date('20211201','yyyymmdd') and to_date('20211231','yyyymmdd')    

 
4、日期和字符相互转换方法(to_date,to_char)

to_date()    将str类型的日期转换成时间类型的日期

to_char()    将时间类型的日期转换成str类型的日期

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串   
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒
    
select to_date('2022-05-08 13:23:44','yyyy-mm-dd hh24:mi:ss')    from dual //
 

5、int时间类型转为datetime类型

将时间戳转化成日期格式

SELECT TO_CHAR(时间戳的那一列 / (1000 * 60 * 60 * 24) +  TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') AS CDATE  FROM 表名 ; 

select  to_char(1112070645 / ( 60 * 60 * 24) +
       to_date('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS')  as cdate  from dual;
 

6、时间比较

select   dkgl_zb , dkdl , dkdl_zb , hm , hm_zb , mn , mn_zb , lzym , lzym_zb , haomrq , dqsj 
from stati_rlgl_pmcsrb_zh where 1=1 and '2022-04-24' = to_char(haomrq,'yyyy-mm-dd') order by dcno asc;

select   dkgl_zb , dkdl , dkdl_zb , hm , hm_zb , mn , mn_zb , lzym , lzym_zb , haomrq , dqsj 
from stati_rlgl_pmcsrb_zh where 1=1 and haomrq= to_date('2022-04-24 09:12:23','yyyy-mm-dd hh24:mi:ss') order by dcno asc;

7、其他时间函数

trunc[截断到最接近的日期,单位为天] ,返回的是日期类型

select sysdate S1,                     
     trunc(sysdate) S2,                 //返回当前日期,无时分秒
     trunc(sysdate,'year') YEAR,        //返回当前年的1月1日,无时分秒
     trunc(sysdate,'month') MONTH ,     //返回当前月的1日,无时分秒
     trunc(sysdate,'day') DAY           //返回当前星期的星期天,无时分秒
   from dual;

获取当前时间是一年的第几天:

select  to_char(sysdate,'DDD'),sysdate from dual;

找出今年的天数:

 select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual    
 

5秒钟一个间隔:

  select  to_date(floor(to_char(sysdate,'SSSSS')/300) * 300,'SSSSS') ,to_char(sysdate,'SSSSS')     from dual; 


格式输出 :

select extract(DAY from interval)||'天'||extract(HOUR from interval)||'小时'||extract(MINUTE from interval)||'分钟'||extract(SECOND from interval)||'秒' 间隔 from (  
select numtodsinterval(to_date('2008-10-09 12:30:18','yyyy-mm-dd hh24:mi:ss  
')-to_date('2008-10-28','yyyy-mm-dd'),'DAY') interval from dual)

round舍入到最接近的日期
select sysdate S1,
   round(sysdate) S2 ,
   round(sysdate,'year') YEAR,
   round(sysdate,'month') MONTH ,
   round(sysdate,'day') DAY from dual;

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值