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