ROUND(x,y)與TRUNC(x,y)函式中y引數值為省略、空值與null的區別

skyin_1603發表於2016-12-13

----ROUND(x,y)TRUNC(x,y)函式中y引數值為省略、空值與null的區別:

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 round(sysdate),round(sysdate,'dd'),

  2  trunc(sysdate),trunc(sysdate,'dd')

  3  from dual;

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

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

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


 ---使用函式查詢數字資料型別:
 

sys@PROD>select round(3,14159),round(3.14159,0),

  2  trunc(3,14159),trunc(3.14159,0)

  3   from dual;

 

ROUND(3,14159) ROUND(3.14159,0) TRUNC(3,14159) TRUNC(3.14159,0)

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

             3                3              3                3

#透過這一組查詢,可以看到省略y值得情況下,相當於數字型別的以個位數四捨五入,

相當於日期型別的以dd”格式取捨。

 

---將函式中的y引數值設定為’’ :

sys@PROD>select round(sysdate,''),round(3.14159,''),

  2  trunc(sysdate,''),trunc(3.14159,'')

  3  from dual;

ROUND(SYSDATE,'')   ROUND(3.14159,'') TRUNC(SYSDATE,'')   TRUNC(3.14159,'')

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

 

#均為空值。

---將函式中的y引數值設定為null :

sys@PROD>select round(sysdate,null), round(3.14159,null),

  2  trunc(sysdate,null),trunc(3.14159,null)

  3  from dual;

ROUND(SYSDATE,NULL) ROUND(3.14159,NULL) TRUNC(SYSDATE,NULL) TRUNC(3.14159,NULL)

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

 

#均為空值。

---擴充查詢:

--以世紀為取捨單位:

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

ROUND(SYSDATE,'CC')

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

2001-01-01 00:00:00

 

--以季度為取捨單位:

sys@PROD>select round(to_date('2016-08-16 14:31:48','yyyy-mm-dd hh24:mi:ss'),'q') from dual;

ROUND(TO_DATE('2016

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

2016-10-01 00:00:00

 

--以任意字元為取捨依據:

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

select round(3.14159,'/') from dual

                     *

ERROR at line 1:

ORA-01722: invalid number

#報錯,不能識別這種資料型別。

 

--以小數點後222位取捨:

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

ROUND(3.14159,222)

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

           3.14159

 

--以小數點前10位取捨:

sys@PROD>select round(333.14159,-10) from dual;

ROUND(333.14159,-10)

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

                   0

--總結來說:

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

TRUNC(x,y):以小數點後Y位(或Y日期格式)截斷取X的值。
ROUND(x,y)中的y引數,對於數字型別,正數為小數點右邊y位,負數為小數點左邊y位,進行四捨五入
對於日期型別,是以y為取捨單位進行四捨五入;
TRUNC(x,y)中的y引數,對於數字型別,正數為小數點右邊y位,負數為小數點左邊y位,進行擷取取值;
對於日期型別,是以y為取捨單位進行擷取取值。

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

相關文章