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;

执行结果:

Oracle函数:trunc、round、ceil和floor

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;

执行结果:

Oracle函数:trunc、round、ceil和floor

2.round函数

1).round(date)

格式:round(date,fmt)

传入的date参数必须为时间类型,返回结果始终为date类型

示例:

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

Oracle函数:trunc、round、ceil和floor

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;

执行结果:

Oracle函数:trunc、round、ceil和floor

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格式参考地址

上一篇:jQuery根据元素值或元素下标来删除一个数组元素及数组对象方法列表


下一篇:Math.round()