1. 程式人生 > >Oracle函式集錦

Oracle函式集錦

一、case when then 用法

case具有兩種格式。簡單case函式和case搜尋函式。

--簡單case函式
case sex
  when '1' then '男'
  when '2' then '女’
  else '其他' end
--case搜尋函式
case when sex = '1' then '男'
     when sex = '2' then '女'
     else '其他' end 

這兩種方式,可以實現相同的功能。簡單case函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判定式。

還有一個需要注重的問題,case函式只返回第一個符合條件的值,剩下的case部分將會被自動忽略。

--比如說,下面這段sql,你永遠無法得到“第二類”這個結果
case when col_1 in ('a','b') then '第一類'
     when col_1 in ('a') then '第二類'
     else '其他' end  

二、oracle中trunc函式的簡單使用

oracle中的trunc()函式是對時間型別或者數字進行擷取操作的。
一般用法為trunc(Date,“fmt”),其中fmt 是我們要展示的時間欄位,或者trunc(number),該函式表示取整。

trunc(Date)的用法一般有以下幾種:

trunc(sysdate,'yyyy');//返回當前年的第一天
trunc(sysdate, 'mm');//返回當前月的第一天
trunc(sysdate, 'dd');//返回當前時間的年月日
trunc(sysdate, 'd');//返回當前星期的第一天
trunc(sysdate, 'hh');//返回當前小時

trunc(number)的用法一般有以下幾種:

trunc(55.5,-1) = 50;//-1(負數)表示從小數點左邊第一位擷取後面全置為零;
trunc(55.55,1) = 55.5;//1(正數)表示小數點後面保留一位;
trunc(55.55) = 55;//擷取整數部分;

三、Oracle中instr函式的應用以及詳解
 

格式一:instr( string1, string2 )    /   instr(源字串, 目標字串)

格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] )   /   instr(源字串, 目標字串, 起始位置, 匹配序號)

解析:string2 的值要在string1中查詢,是從start_position給出的數值(即:位置)開始在string1檢索,檢索第nth_appearance(幾)次出現string2。

  注:在Oracle/PLSQL中,instr函式返回要擷取的字串在源字串中的位置。只檢索一次,也就是說從字元的開始到字元的結尾就結束。

2)例項

格式一

1 select instr('helloworld','l') from dual; --返回結果:3    預設第一次出現“l”的位置
2 select instr('helloworld','lo') from dual; --返回結果:4    即:在“lo”中,“l”開始出現的位置
3 select instr('helloworld','wo') from dual; --返回結果:6    即“w”開始出現的位置

格式二

1.select instr('helloworld','l',2,2) from dual;  --返回結果:4    也就是說:在"helloworld"的第2(e)號位置開始,查詢第二次出現的“l”的位置
2 select instr('helloworld','l',3,2) from dual;  --返回結果:4    也就是說:在"helloworld"的第3(l)號位置開始,查詢第二次出現的“l”的位置
3 select instr('helloworld','l',4,2) from dual;  --返回結果:9    也就是說:在"helloworld"的第4(l)號位置開始,查詢第二次出現的“l”的位置
4 select instr('helloworld','l',-1,1) from dual;  --返回結果:9    也就是說:在"helloworld"的倒數第1(d)號位置開始,往回查詢第一次出現的“l”的位置
5 select instr('helloworld','l',-2,2) from dual;  --返回結果:4    也就是說:在"helloworld"的倒數第1(d)號位置開始,往回查詢第二次出現的“l”的位置
6 select instr('helloworld','l',2,3) from dual;  --返回結果:9    也就是說:在"helloworld"的第2(e)號位置開始,查詢第三次出現的“l”的位置
7 select instr('helloworld','l',-2,3) from dual; --返回結果:3    也就是說:在"helloworld"的倒數第2(l)號位置開始,往回查詢第三次出現的“l”的位置

 

四、Oracle中保留兩位小數函式應用

(1)在寫SQL的時候,直接保留兩位小數 
(2)在java程式碼裡面將查詢出來的數進行格式化處理,保留兩位小數 
先說第一種方案:在SQL中的處理 
我使用的oracle資料庫,所以有3個函式可以選擇,分別是: 
(1)ROUND(A/B,2) 
ROUND()函式是會將計算結果進行四捨五入的,如果所需要的值需要進行四捨五入,就可以選擇這個函式,可以有一個引數,也可以有兩個引數;如果有兩個param,第一個是你的計算表示式,第二個是需要保留的小數位數。例子如下: 
這裡寫圖片描述 
(2)TRUNC(A/B,2) 
TRUNC()函式是不會將計算結果進行四捨五入的,如果所需要的值不需要進行四捨五入,就可以選擇這個函式,可以有一個引數,也可以有兩個引數;如果有兩個param,第一個是你的計算表示式,第二個是需要保留的小數位數。例子如下: 
這裡寫圖片描述 
(3)TO_CHAR(A/B,’FM99990.99’) 
TO_CHAR()是一個格式化函式,第一個引數是計算表示式,第二個引數是指定格式化的格式,如果保留兩位小數則小數點後寫兩個99,這裡的數字9代表的數字,也是一個佔位符,表示該位置上以後會是一個數字,為什麼小數點前面會是一個0,而不是9,是因為如果計算結果小於1,那麼只會顯示小數點和小數點之後的部分,前面的0會忽略掉 
這裡寫圖片描述 
這裡寫圖片描述