1. 程式人生 > >171207之Oracle中decode函式、SIGN函式和INSTR函式

171207之Oracle中decode函式、SIGN函式和INSTR函式

一:DECODE的語法:
DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value 等於if1時,DECODE函式的結果返回then1,…,如果不等於任何一個if值,則返回else。

decode (expression, search_1, result_1, search_2, result_2, ....
search_n, result_n)

decode (expression, search_1, result_1, search_2, result_2, .... 
search_n, result_n, default
)

decode函式比較表示式和搜尋字,如果匹配,返回結果;如果不匹配,返回default值;如果未定義default值,則返回空值。

先構造一個例子,假設我們想給智星職員加工資,其標準是:工資在8000元以下的將加20%;工資在8000元以上的加15%,通常的做法
是,先選出記錄 中的工資欄位值? select salary into var-salary from employee,然後對變數var-salary用if-then-else或choose case之類的流控制語句進行判斷。 如果用DECODE函式,那麼我們就可以把這些流控制語句省略,通過SQL語句就可以直接完成。如下:

select
decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2, salary from employee 是不是很簡潔?

有學生成績表student,現在要用decode函式實現以下幾個功能:成績>85,顯示優秀;>70顯示良好;>60及格;否則是不及格。
假設student的編號為id,成績為score,那麼:

select id, decode(sign(score-85),1,'優秀',0,'優秀',-1, 
decode(sign(score-70),1,'良好',0,'良好',-1, 
decode(sign(score-60
)
,1,'及格',0,'及格',-1,'不及格')
)
)
from student;

oracle函式:decode() 什麼情況下要用到?

      lSQL.append("        decode(t.bkc040, '1', '已匯入', 
      '0', '未匯入', t.bkc040) as bkc040n, ");
        lSQL.append("        decode(t.bkc252, ");
        lSQL.append("               '1', ");
        lSQL.append("               '驗證通過', ");
        lSQL.append("               '0', ");
        lSQL.append("               '未驗證', ");
        lSQL.append("               '-1', ");
        lSQL.append("               '驗證不通過', ");
        lSQL.append("               '2', ");
        lSQL.append("               '部分驗證通過', ");
        lSQL.append("               t.bkc252) as bkc252n ");
                lSQL.append("   from KB77 t ");
        lSQL.append("  where t.bkc133='"+bkc133+"' ");
        if(StringUtils.isNotEmpty(bkc252)){
            lSQL.append("    and t.bkc252='"+bkc252+"' ");
        }

二:Sign函式
在Oracle/PLSQL中, sign 函式返回一個數字的正負標誌.
語法如下:sign( number )
number 要測試標誌的數字.
If number < 0, then sign returns -1.
If number = 0, then sign returns 0.
If number > 0, then sign returns 1.

例如:
sign(-23) would return -1
sign(-0.001) would return -1
sign(0) would return 0
sign(0.001) would return 1
sign(23) would return 1
sig(23.601) would return 1

示例:
一、select sign( 100 ),sign(- 100 ),sign( 0 ) from dual;
  SIGN(100) SIGN(-100) SIGN(0)
  ———————————————————–
  1 -1 0
二、a=10,b=20
  則sign(a-b)返回-1

三:instr函式
在Oracle中,可以使用instr函式對某個字串進行判斷,判斷其是否含有指定的字元。

其語法為: instr(sourceString,destString,start,appearPosition).
其中
1: sourceString 代表源字串;
2: destString 代表想從源字串中查詢的子串;
3: start 代表查詢的開始位置,該引數可選的,預設為1;
4: appearPosition代表想從源字元中查找出第幾次出現的destString,該引數也是可選的,預設為1;

返回值為:查詢到的字串的位置

說明:如果start的值為負數,那麼代表從右往左進行查詢。

例:
select * from dictionary where instr(comments,’index’)>0;

相關推薦

171207Oracledecode函式SIGN函式INSTR函式

一:DECODE的語法: DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value 等於if1時,DECODE函式的結果返回then1,…,如果不等於任何一個if值,則返回else。 dec

OpenCV3——影象線性混合操作陣列加權addWeighted()函式

       線性混合操作是一種典型的二元(兩個輸入)的畫素操作;       計算陣列加權和:addWeighted()函式//函式原型 void addWeighted(InputArray src1,double alpha,InputArray src2,double

C++ | vector 類的 push_back( ) 函式 (新增刪除函式

vector是用陣列實現的,每次執行push_back操作,相當於底層的陣列實現要重新分配大小(即先free掉原來的儲存,後重新malloc) 函式名 push_back,演算法語言裡面的一個函式名,如:    1) c++中的vector標頭檔案裡面就有這個push_

Oracledecode函式sign函式的用法

資料庫表結構如下: 流程控制函式 DECODE decode()函式簡介: 主要作用: 將查詢結果翻譯成其他值(即以其他形式表現出來,以下舉例說明); 使用方法: Select decode(columnname,值1,翻譯值1,值2,翻譯值2,…值n,翻譯值n,預

oracle的nvl nvl2decodecase when 函式的用法

參考文件:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html <span style="font-size:18

【轉載】oracledecode函式用法

1、DECODE的語法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else)。表示假設value 等於if1時,DECODE函式的結果返回then1,...,假設不等於不論什麼一個if值。則返回else 2、該函式的含義例如以下:  IF 條件=值1 TH

Oracle null判斷並替換空值 ORACLEDECODE的用法(例子) Oracle的NVL函式用法 用 ISNULL(), NVL(), IFNULL() and COALESCE() 函式替換空值

  可用 NVL(), IFNULL() ,COALESCE(),DECODE() 函式 1.NVL() 從兩個表示式返回一個非 null 值。語法NVL(eExpression1, eExpression2)引數eExpression1, eExpression2 如果 eExpressio

關於Oracledecode函式的用法

        相信有過Oracle程式設計基礎的人都應該接觸過decode這一函式,沒有接觸過的也沒有關係,接下來我簡單的介紹下關於decode函式的用法,首先decode是Oracle的一個內建函式,典型的SQL語句如下: select decode(a,1,'cc',

Oracledecode函式對case when的簡化

現假設我們有一個使用者表t_user,其中擁有一個表示性別的欄位gender,該欄位對應的值可能為0、1或者空,其中0表示“男”,1表示“女”,空表示“未填”。現需要我們在查詢t_user的gender時不是顯示對應的0和1,而是顯示對應的文字,“男”或“女”。

oracledecode()nvl()函式的用法

decode(待比較的物件,如果為這個,那麼結果為這個,否則結果是這個) nvl (test,1)  判斷是否為空,如果為空就取1 select * from  表名 where 1=1 and  instr(a,b)

Oracle decode 函式用法 與lpad結合

 //decode 函式用法: decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,預設值) 該函式的含義如下: IF 條件=值1 THEN     RETURN(翻譯值1) ELSIF 條件=值2 THEN     RETURN(翻譯值2)   

Oracle 重新編譯無效的儲存過程, 或函式觸發器等物件

Oracle 中的儲存過程在有些情況下會變成失效狀態,在 PL/SQL Developer 中該儲存過程的圖示左上角顯示一把小紅叉叉。比如儲過程所引用的物件失效,dblink 出問題啦都可能引起用到它的儲存過程失效。再就我的儲存過程經常會變成無效,至今原因都未查明。查詢 db

sql server類似oracledecode功能的函式

SQL Server 2008中的寫法: select t.PROJECTNAME, t.BUILDCONTENTSCALE, CASE t.PROJECTLEVEL WHEN '0' THEN '國家重點' WHEN '1' THEN '省重

OracleDecode()函式使用詳細

decode()函式是ORACLE PL/SQL是功能強大的函式之一,目前還只有ORACLE公司的SQL提供了此函式,其他資料庫廠商的SQL實現還沒有此功能。       DECODE函式是ORACLE PL/SQL是功能強大的函式之一,目前還只有ORACLE公司的SQ

oraclescott/tigersysSYSDBAsystem都是什麽用

blank ora fff col system detail acl .net details     oracle中scott/tiger、sys、SYSDBA、system都是什麽用     點我,點我~oracle中scott/tiger、sys、SYSDBA、sy

Oracle decode 函數用法

個數 依次 elsif 根據 sql nbsp htm 開發 ret 含義解釋: decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 該函數的含義如下:IF 條件=值1 THEN    RETURN(翻譯值1)ELSIF 條件=值2 THEN

Oracle count(1) count(*) count(列名) 函數的區別

select sdn 快的 包含 varchar2 into 要去 tails lan 1)count(1)與count(*)比較: 1、如果你的數據表沒有主鍵,那麽count(1)比count(*)快2、如果有主鍵的話,那主鍵(聯合主鍵)作為count的條件也比count

Oracle時間日期格式轉換及常用日期函式

我的第一篇部落格,記錄學習,分享生活。 Oracle時間日期格式轉換: 主要有兩種格式,一種為日期格式date,一種為字元格式char。 查詢當前日期: select sysdate from dual; 將日期轉化為字元格式,可以對日期進行一些操作 --顯示所有僱員的姓名和加

ORACLE建立表對錶進行增刪改查的語法

最近在學習ORACLE,現將在ORACLE中建立表、對錶進行增刪該查的語法總結如下: 表是一種資料庫物件,是基本的資料儲存單位,由行和列組成 表的建立(以課程資訊表為例): CREATE TABLE OBJECTS       

轉,Oracle關於處理小數點位數的幾個函式,取小數位數,Oracle查詢函式

關於處理小數點位數的幾個oracle函式() 1. 取四捨五入的幾位小數 select round(1.2345, 3) from dual; 結果:1.235 2. 保留兩位小數,只舍 select trunc(1.2345, 2) from dual; 結果:1.23 select trun