Oracle函式:trunc、round、ceil和floor
阿新 • • 發佈:2020-12-08
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格式參考地址