• 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

  • 相关阅读:
    HTML5项目笔记7:使用HTML5 WebStorage API构建与.NET对应的会话机制 Hello
    论设计模式和分析模式
    昨天我做了点什么事情啊?
    时间,时间,还是时间
    人生需要规划
    突然想起今天的博客汇报没写
    昨天看了熊猫大侠
    双休日往往会忘了写日志
    老婆说我是缺心眼!
    要下班了才想起没写报告
  • 原文地址:https://www.cnblogs.com/dar521lin/p/5443468.html
Copyright © 2020-2023  润新知