Oracle中trunc函数、round 函数、ceil函数和floor 函数的使用

TRUNC()函数

TRUNC()函数两种

1.TRUNC(for dates)
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date 一个日期值
fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去


下面是该函数的使用情况:
TRUNC(TO_DATE(’24-Nov-1999 08:00 pm’,’dd-mon-yyyy hh:mi am’))
=’24-Nov-1999 12:00:00 am’
TRUNC(TO_DATE(’24-Nov-1999 08:37 pm’,’dd-mon-yyyy hh:mi am’,’hh’)) =’24-Nov-1999 08:00:00 am’

2.TRUNC(for number)
TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
其具体的语法格式如下:
TRUNC(number[,decimals])
其中:
number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分


下面是该函数的使用情况:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。

问:我有一个表,其中包含两个日期"vis_dt1" 和"vis_dt2"。我想要找到落在某个范围之外的所有的"vis_dt2 dates",例如"vis_dt1"之后的144-260天,但是包括了"vis_dt1"在内。我知道Oracle给我之间的天数,但是我如何才能调整为第一天?有没有通用的方法可以这样的运行日期?

答:我认为你的where子句中应制定如下的条件来表达你的需求:
  TRUNC(vis_dt2) NOT BETWEEN trunc(visdt1+144) and trunc(visdt1+260)
  AND trunc(vis_dt2) >= trunc(vis_dt1)

 

用什么函数取2个日期之间的天数

谢谢老大了。我用下面3个语句,终于明白了:
select trunc(to_date('20040102','yyyymmdd') - to_date('200312','yyyymm')) from dual;
结果:32
select trunc(to_date('200401','yyyymm') - to_date('200312','yyyymm')) from dual;
结果:31
select trunc(to_date('2004','yyyy') - to_date('2003','yyyy')) from dual;
结果:365
   

 

floor函数

  floor(x),有时候也写做Floor(x),其功能是“下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接去掉小数部分),例如:

x=3.14,floor(x)=3

y=9.99999,floor(y)=9

在C语言的库函数中,floor函数的语法如下:

#include <math.h>

double floor( double arg );

功能: 函数返回参数不大于arg的最大整数。例如,

x = 6.04;

y = floor( x );

y的值为6.0.

与floor函数对应的是ceil函数,即上取整函数。

有趣的是,要实现 四舍五入,只需要 将代码中的  floor(m)改成floor(m+0.5)就可以了。

有趣的是,floor在英文中是地板的意思,而ceil是天花板的意思,很形象地描述了下取整和上取整的数学运算。

说明:如果任一参数为非数值参数,则 FLOOR 将返回错误值 #VALUE!。

如果 number 和 significance 符号相反,则函数 FLOOR 将返回错误值 #NUM!。

不论 number 的正负号如何,舍入时参数的绝对值都将减小。如果 number 恰好是 significance 的倍数,则无需进行任何舍入处理。

FLOOR

用途:将参数Number沿绝对值减小的方向去尾舍入,使其等于最接近的significance的倍数。

语法:FLOOR(number,significance)

参数:Number为要舍入的某一数值,Significance为该数值的倍数。

实例:如果A1=22.5,则公式“=FLOOR(A1,1)”返回22;=FLOOR(-2.5,-2)返回-2。

“使其等于最接近的significance的倍数”,比如:

如果A1=22.5,则公式“=FLOOR(A1,1)“ 结果就是22,22最接近1的倍数

如果A1=22.5,则公式“=FLOOR(A1,3)“ 结果就是21,21最接近3的倍数

如果A1=25.8,则公式“=FLOOR(A1,3)“ 结果就是24,24最接近3的倍数

 

 

round函数(四舍五入) 


描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果。 

ROUND( number, [ decimal_places ] ) FROM DUAL 参数: 

number : 欲处理之数值 
decimal_places : 四舍五入 , 小数取几位 ( 预设为 0 ) Sample : 
select round(123.456, 0) from dual;          

select round(123.456, 1) from dual;          

select round(-123.456, 2) from dual;      

 

 

ceil和floor函数 


ceil和floor函数在一些业务数据的时候,有时还是很有用的。 

ceil(n) 取大于等于数值n的最小整数; 

floor(n)取小于等于数值n的最大整数

 

应用:

对于每个员工,显示其加入公司的天数。

 select floor(sysdate-hiredate) "入职天数",ename from emp; 

  select trunc(sysdate-hiredate) "入职天数",ename from emp

posted on 2016-04-28 17:24  老蜈蚣  阅读(972)  评论(0编辑  收藏  举报

导航