自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle數(shù)據(jù)庫的decode、sign、trunc函數(shù)使用詳解

數(shù)據(jù)庫 Oracle
本文我們主要介紹了Oracle數(shù)據(jù)庫的decode、sign、trunc函數(shù)的使用,希望能夠?qū)δ兴鶐椭?/div>

Oracle數(shù)據(jù)庫的函數(shù)有很多,本文我們主要介紹一下decode、sign、trunc函數(shù)的使用,接下來就讓我們一起來了解一下這部分內(nèi)容。

一、decode

在Oracle/PLSQL中, decode 具有和 IF-THEN-ELSE 一樣的功能。

decode 函數(shù)語法如下:

decode( expression , search , result [, search , result]... [, default] );

expression 要比較的表達式。

search 要與expression 比較的字段。.

result 如果expression 與search 一樣的話,返回該結(jié)果。.

default 此參數(shù)可選,如果沒有與expression 匹配上的search,就返回此結(jié)果,如果此參數(shù)沒有設(shè)置,當(dāng)沒有與expression匹配上的search時,返回null。

search 和 result可成對出現(xiàn)多次,代表各種要匹配的情況。

應(yīng)用于Oracle 9i, Oracle 10g, Oracle 11g。

例如:

 

  1. You could use the decode function in an SQL statement as follows:  
  2.  
  3. select supplier_name,decode(supplier_id,1000,'IBM',10001,'Microsoft','1002','Hewlett Packard','Gateway') result from suppliers; 

 

上面的sql語句相當(dāng)于下面的IF-THEN-ELSE :

 

  1. IF supplier_id = 10000 THEN  
  2.  
  3. result :'IBM';  
  4.  
  5. ELSIF supplier_id = 10001 THEN  
  6.  
  7. result :'Microsoft';  
  8.  
  9. ELSIF supplier_id = 10002 THEN  
  10.  
  11. result :'Hewlett Packard';  
  12.  
  13. ELSE  
  14.  
  15. result :'Gateway';  
  16.  
  17. END IF; 

 

decode 函數(shù)會挨個匹配supplier_id 的值.

常見問題:

問題1: 現(xiàn)在一個閱讀者想問,怎么使用decode函數(shù)來比較兩個日期呢?(例如:date1 和 date2), 如果date1 > date2, decode 函數(shù)返回date2. 否則decode函數(shù)返回 date1.

回答: 要實現(xiàn)上述要求,可使用decode函數(shù)如下:

decode((date1 - date2) - abs(date1 - date2), 0, date2, date1)

如果date1大于date2,下面表達是會等于0:

(date1 - date2) - abs(date1 - date2)

幫助性提示:可用decode函數(shù)綁定SIGN 函數(shù),像下面這樣:

上面比較日期的語句可修改如下:

DECODE(SIGN(date1-date2), 1, date2, date1)

SIGN/DECODE 聯(lián)合對于有關(guān)銷售紅利等數(shù)字方面的比較是非常有用的。

DECODE(SIGN(actual-target), -1, 'NO Bonus for you', 0,'Just made it', 1, 'Congrats, you are a winner')。

問題2: 我想知道是否可以用decode函數(shù)來確定數(shù)字范圍,例如 1-10 = 'category 1', 11-20 = 'category 2', 比一個一個比較應(yīng)該會好一點吧。

回答: 不幸的告訴你,不可以用decode函數(shù)來確定數(shù)字的范圍. 可是你可以試著創(chuàng)建一個表達式,這個表達式可以得一個數(shù)字指定的范圍,下一個數(shù)字對應(yīng)下一個指定的范圍, 以此類推。

例如:

select supplier_id,decode(trunc((supplier_id-1)/10),0,'category 1',1,'category 2',2,'category 3','unknown') result from suppliers;

這個例子基于這個公式:trunc ((supplier_id - 1) / 10

如果supplier_id在1和10之間,表達式計算值=0.

如果supplier_id在11和20之間,表達式計算值=1.

二、sign

在Oracle/PLSQL中, sign 函數(shù)返回一個數(shù)字的正負標志.

語法如下:sign( number )

number 要測試標志的數(shù)字.

If number < 0, then sign returns -1.

If number = 0, then sign returns 0.

If number > 0, then sign returns 1.

應(yīng)用于:Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g。

例如:

 

  1. sign(-23) would return -1 sign(0.001) would return -1 sign(0) would return 0 sign(0.001)   
  2.  
  3. would return 1 sign(23) would return 1 sig(23.601)  
  4.  
  5. would return 1 

 

三、trunc(number)

在Oracle/PLSQL中, trunc function returns a number truncated to a certain number of decimal places.

trunc function 語法如下:

trunc( number, [ decimal_places ] )

number 要截取的數(shù)字。

decimal_places 要保留的小數(shù)位. 這個參數(shù)必須是個整數(shù). 如果此參數(shù)缺省,默認保留0位小數(shù)

應(yīng)用于:Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g

例如For example:

trunc(125.815) would return 125 trunc(125.815, 0) would return 125 trunc(125.815, 1) would return 125.8 trunc(125.815, 2) would return 125.81 trunc(125.81, 3) would return 125.81 trunc(-125.815, 2) would return -125.81 trunc(125.815, -1) would return 120 trunc(125.815, -2) would return 100 trunc(125.81, -3) would return 0

如果decimal_places 大于number 本身的小數(shù)位數(shù),返回原數(shù)字不會加0。

如:trunc(125.81,3) would return 125.81;

如果decimal_places 為負數(shù),那么將指定的位數(shù)

如果supplier_id在21和30之間,表達式計算值=3.

關(guān)于Oracle數(shù)據(jù)庫的decode、sign、trunc函數(shù)的使用就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. 關(guān)于Oracle數(shù)據(jù)庫閃回個性的詳細介紹
  2. Oracle數(shù)據(jù)庫對DDL語句和DML語句的事務(wù)管理
  3. Oracle數(shù)據(jù)庫啟動參數(shù)文件及相關(guān)SQL語句簡介
  4. Oracle數(shù)據(jù)庫的幾種文件及表空間數(shù)據(jù)塊的知識簡介
  5. Oracle數(shù)據(jù)庫查詢登錄用戶名所屬表空間及其使用情況
責(zé)任編輯:趙鵬 來源: 火魔網(wǎng)
相關(guān)推薦

2010-10-25 14:28:53

oracle trun

2010-04-30 17:58:55

Oracle trun

2011-08-11 16:55:34

Oracle數(shù)據(jù)庫AWR

2011-05-19 13:25:14

Oracle數(shù)據(jù)庫

2009-05-13 10:28:30

OracleDUAL數(shù)據(jù)庫

2010-04-02 13:59:08

Oracle數(shù)據(jù)庫

2010-04-14 15:14:11

Oracle數(shù)據(jù)庫

2011-08-16 13:17:29

2011-08-22 11:39:53

SQL Server數(shù)PIVOT

2011-08-19 16:20:14

Oracle數(shù)據(jù)庫查看工具LogMine

2011-03-29 10:47:49

ORACLE數(shù)據(jù)庫

2010-11-04 11:45:10

Oracle DECO

2010-04-27 12:51:49

Oracle 函數(shù)de

2010-05-10 18:22:28

Oracle deco

2010-10-25 17:00:40

Oracle deco

2011-08-18 15:49:21

Oracle厲行計劃

2011-05-17 15:02:15

ORACLE數(shù)據(jù)庫備份

2011-08-23 09:23:35

DB2OLAP函數(shù)OLTP

2011-04-11 13:19:41

Oracle數(shù)據(jù)庫

2011-08-24 15:36:30

點贊
收藏

51CTO技術(shù)棧公眾號