Oracle函数:trunc、round、ceil和floor

1.trunc函数

1).trunc(date)

格式:trunc(date,fmt)
trunc用于截取时间,即便你指定不同的格式类型,返回的类型始终都是时间类型。
示例:

with dates as (
    select date'2015-01-01' d from dual union
    select date'2015-01-10' d from dual union
    select date'2015-02-01' d from dual union
    select timestamp'2015-03-03 23:45:00' d from dual union
    select timestamp'2015-04-11 12:34:56' d from dual
    )
    select d "原先的时间",
       trunc(d) "最近的一天",
       trunc(d, 'ww') "最近的一周",
       trunc(d, 'iw') "一周的开始",
       trunc(d, 'mm') "一月的开始",
       trunc(d, 'year') "一年的开始"
    from dates;

执行结果:

2).trunc(number)

格式:trunc(n1,n2)
trunc用于截取数字类型,返回n1中截取n2个小数位。如果n2没有传,则默认为0,即截取所有小数部分。n2还可以为负数,表示截取小数点往左边取位数。
示例:

with number1 as (
    select 1234.1 n from dual union
    select 1234.12 n from dual union
    select 1234.123 n from dual union
    select 1234.1234 n from dual
    )
    select n "原来的数字",
    trunc(n) "取整",
    trunc(n,0) "取整",
    trunc(n, 1) "取小数一位",
    trunc(n, -1) "忽略整数一位取0"
    from number1;

执行结果:

2.round函数

1).round(date)

格式:round(date,fmt)
传入的date参数必须为时间类型,返回结果始终为date类型
示例:

   select round (date'2020-12-18','year') "new year" from dual;
执行结果:

2).round(number)

格式:round(n,integer)
如果n为0,不管integer是多少,始终返回0;
如果n为负数,则round(n,integer),返回-round(-n,integer),注意:这里的n为负值
如果n为正数,则ROUND(n, integer) = FLOOR(n * POWER(10, integer) + 0.5) * POWER(10, -integer),其实就是四舍五入
tips:刚开始看的时候觉得好奇,为什么官网不直接告诉是四舍五入呢,才明白,人家这是告诉我里面的算术逻辑啊~~,如果自己要实现四舍五入,则可以按这个逻辑来实现
power(x,y):x的y次方
示例:

with eg as (
    select 0 n from dual union
    select 12.123 n from dual union
    select 12.153 n from dual union
    select -12.123 n from dual union
    select -12.153 n from dual
)
select
n "原来的数字",
round(n, 1) "小数点后取一位",
round(n, 2) "小数点后取两位"
from eg;

执行结果:

3.ceil函数

格式:ceil(n)
返回大于等于n的最小整数
select ceil(1.11) from dual;//结果2

4.floor函数

格式:floor(n)
返回小于等于n的最大整数
select floor(1.11) from dual;//结果1

附录:fmt格式参考地址

posted @ 2020-12-08 17:20  Dekyou  阅读(441)  评论(0)    收藏  举报