round函式與trunc函式的使用方法

skyin_1603發表於2016-12-13

之前的一些博文中已經提及過這兩個函式的用法,但之前的值使用了數字型別進行的測試。
在這篇博文裡,算是這兩個函式使用的補充吧。因為近段時間裡常用到了這兩個函式,其中省略了
函式中的部分引數,但同樣可以使用函式。以下是測試的過程:

----round函式與trunc函式的使用方法:

sys@PROD>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

 

---函式的結構:

ROUND(x,y):以小數點後Y位(或Y日期格式)四捨五入取X的值。

TRUNC(x,y):以小數點後Y位(或Y日期格式)截斷取X的值。

#兩個函式同時適用於處理日期型別與數字型別的資料。

 

---檢視當前系統的日期與時間:

sys@PROD>select sysdate from dual;

SYSDATE

-------------------

2016-12-13 11:26:37

 

---適用兩個函式檢視省略函式中Y引數值的日期:

sys@PROD>select trunc(sysdate),round(sysdate) from dual;

TRUNC(SYSDATE)      ROUND(SYSDATE)

------------------- -------------------

2016-12-13 00:00:00 2016-12-13 00:00:00

 

sys@PROD>select round(sysdate,'dd'),trunc(sysdate,'dd') from dual;

ROUND(SYSDATE,'DD') TRUNC(SYSDATE,'DD')

------------------- -------------------

2016-12-13 00:00:00 2016-12-13 00:00:00

#當函式省略Y引數的時候,數字型別預設為Y=0,可省略;日期型別預設為Y=’dd’,可省略。

 

---使用兩個函式檢視省略函式中Y引數值的某個數值:

sys@PROD>select round(3.14159),trunc(3.14159) from dual;

ROUND(3.14159) TRUNC(3.14159)

-------------- --------------

             3              3

#round函式取得該值為3,因為個位數後面為1,四捨五入取0.

 

---使用兩個函式檢視以不同格式取捨時指定的日期與時間:

--round函式

sys@PROD>select round(to_date('2016-12-13 13:45:55','yyyy-mm-dd hh24:mi:ss')),

  2  round(to_date('2016-12-13 13:45:55','yyyy-mm-dd hh24:mi:ss'),'mm'),

  3  round(to_date('2016-12-13 13:45:55','yyyy-mm-dd hh24:mi:ss'),'yyyy')

  4  from dual;

ROUND(TO_DATE('2016 ROUND(TO_DATE('2016 ROUND(TO_DATE('2016

------------------- ------------------- -------------------

2016-12-14 00:00:00 2016-12-01 00:00:00 2017-01-01 00:00:00

sys@PROD>select round(to_date('2016-12-16 13:45:55','yyyy-mm-dd hh24:mi:ss'),'mm') from dual;

ROUND(TO_DATE('2016

-------------------

2017-01-01 00:00:00

 

--trunc函式:

sys@PROD>select trunc(to_date('2016-12-16 13:45:55','yyyy-mm-dd hh24:mi:ss')),

  2  trunc(to_date('2016-12-16 13:45:55','yyyy-mm-dd hh24:mi:ss'),'mm'),

  3  trunc(to_date('2016-12-16 13:45:55','yyyy-mm-dd hh24:mi:ss'),'yyyy')

  4  from dual;

 

TRUNC(TO_DATE('2016 TRUNC(TO_DATE('2016 TRUNC(TO_DATE('2016

------------------- ------------------- -------------------

2016-12-16 00:00:00 2016-12-01 00:00:00 2016-01-01 00:00:00

sys@PROD>

 

---使用兩個函式檢視以不同位數取捨時指定的數值:

--round函式:

sys@PROD>select round(36.64159),round(36.64159,2),round(36.64159,-1) from dual;

ROUND(36.64159) ROUND(36.64159,2) ROUND(36.64159,-1)

--------------- ----------------- ------------------

             37             36.64                 40

 

--trunc函式:

sys@PROD>select trunc(36.64159),trunc(36.64159,2),trunc(36.64159,-1) from dual;

TRUNC(36.64159) TRUNC(36.64159,2) TRUNC(36.64159,-1)

--------------- ----------------- ------------------

             36             36.64                 30

--我們從以上的測試看出:總的來說,round函式是嚴格遵循“四捨五入”法則取捨,而trunc函式則沒有
嚴格遵循。trunc更利索地擷取,從引數值中確定參考位置,然後就從該位置之後的位數全部置零(對日期型別,全部以月份或日的首個月份或日)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2130379/,如需轉載,請註明出處,否則將追究法律責任。

相關文章