侧边栏壁纸
博主头像
CYC的个人博客博主等级

学习使人进步

  • 累计撰写 91 篇文章
  • 累计创建 11 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Oracle时间计算公式

Administrator
2023-11-21 / 0 评论 / 0 点赞 / 129 阅读 / 4629 字

Oracle时间计算公式

oracle 两个时间相减默认的是天数

oracle 两个时间相减默认的是天数*24 为相差的小时数

oracle 两个时间相减默认的是天数*24*60 为相差的分钟数

oracle 两个时间相减默认的是天数*24*60*60 为相差的秒数

--MONTHS_BETWEEN(date2,date1) 
给出date2-date1的月份 
SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual; 

MON_BETWEEN 
----------- 
  9 
SQL>select months_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.dd')) mon_betw from dual; 

MON_BETW 
--------- 
-60 

Oracle计算时间差表达式 

--获取两时间的相差豪秒数 
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 
1 row selected 
*/ 

--获取两时间的相差秒数 
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 
1 row selected 
*/ 

--获取两时间的相差分钟数 
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 
1 row selected 
*/ 

--获取两时间的相差小时数 
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 
1 row selected 
*/ 

--获取两时间的相差天数 
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 
1 row selected 
*/ 

---------------------------------------- 
注:天数可以2个日期直接减,这样更加方便 
---------------------------------------- 

--获取两时间月份差 
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 
1 row selected 
*/ 

-------------------------------------- 
注:可以使用months_between函数,更加方便 
-------------------------------------- 

--获取两时间年份差 
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
---------- 



select sysdate,add_months(sysdate,12) from dual;  --加1年 
select sysdate,add_months(sysdate,1) from dual;   --加1月 
select sysdate,TO_CHAR(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1星期 
select sysdate,TO_CHAR(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1天 
select sysdate,TO_CHAR(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1小时 
select sysdate,TO_CHAR(sysdate+1/24/60,'yyyy-mm-dd HH23:MI:SS') from dual;  --加1分钟 
select sysdate,TO_CHAR(sysdate+1/24/60/60,'yyyy-mm-dd HH23:MI:SS') from dual;  --加1秒 
select   sysdate+7   from   dual;                     --加7天



Oracle中
trunc
函数
round 
函数
ceil
函数和
floor 
函数的使用
  
1.1trunc
函数处理数字
  
trunc
函数返回处理后的数值,其工作机制与
ROUND
函数极为类似,只是该函数不对指定
小数前或后的部分做相应舍入选择处理,而统统截去。
 
其具体的语法格式如下
 
TRUNC
(
number[,decimals]
)
 
其中:
  
number 
待做截取处理的数值
  
decimals 
指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分。
 
selecttrunc
(
123.98
)
from
 dual
;
 
selecttrunc
(
123.123,2
)
from
 dual
;
 
selecttrunc
(
123.123,-1
)
from
 dual
;
  
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。
与取整类似,
比如
参数为1即取整到十分位,如果是-1
,则是取整到十位,以此类推;如果
所设置的参数为负数,且负数的位数大于或等于整数的字节数的话,则返回为0
。如:
TRUNC(89.985,-3)=0
。
 
1.2trunc
函数处理日期
  
trunc
函数返回以指定元元素格式截去一部分的日期值。
 
其具体的语法格式如下:
 
TRUNC
(
date,[fmt]
)
 
其中:
  
date
为必要参数,是输入的一个日期值
  
fmt
参数可忽略,是日期格式,用以指定的元素格式来截去输入的日期值。忽略它则由最近
的日期截去
  
下面是该函数的使用情况:
  
trunc(sysdate,'yyyy') --
返回当年第一天
.
 
trunc(sysdate,'mm') --
返回当月第一天
.
 
trunc(sysdate,'d') --
返回当前星期的第一天
.
 
selecttrunc
(
sysdate
,
'YYYY'
)
from
 dual
;
 
selecttrunc
(
sysdate
,
'MM'
)
from
 dual
;
 
selecttrunc
(
sysdate
,
'D'
)
from
 dual
;
 
2.round
函数
(
四舍五入)
  
描述
 
: 
传回一个数值,该数值是按照指定的小数位元数进行
四舍五入
运算的结果。
  
    SELECT ROUND( number, [ decimal_places ] ) FROM DUAL 
参数
:  
number : 
欲处理之数值
  
decimal_places : 
四舍五入
 
, 
小数取几位
 
( 
预设为
 
0 ) 
Sample :  
select round(123.456, 0) from dual;          
回传
 
123 
select round(123.456, 1) from dual;          
回传
 
123.5 
select round(-123.456, 2) from dual;        
回传
 
-123.46
 
3.ceil
和
floor
函数
  
ceil
和
floor
函数在一些业务数据的时候,有时还是很有用的。
 
ceil(n) 
取大于等于数值
n
的最小整数;
 
floor(n)
取小于等于数值
n
的最大整数
 
如下例子
  
  
应用:
  
对于每个员工,显示其加入公司的天数。
  
SQL> select floor(sysdate-hiredate) "
入职天数
",ename from emp; 
or 
  
SQL> select trunc(sysdate-hiredate) "
入职天数
",ename from emp; 
  

0

评论区