天天看點

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,第一個是你的計算表達式,第二個是需要保留的小數位數。例子如下: 

Oracle函數集錦

(2)TRUNC(A/B,2) 

TRUNC()函數是不會将計算結果進行四舍五入的,如果所需要的值不需要進行四舍五入,就可以選擇這個函數,可以有一個參數,也可以有兩個參數;如果有兩個param,第一個是你的計算表達式,第二個是需要保留的小數位數。例子如下: 

Oracle函數集錦

(3)TO_CHAR(A/B,’FM99990.99’) 

TO_CHAR()是一個格式化函數,第一個參數是計算表達式,第二個參數是指定格式化的格式,如果保留兩位小數則小數點後寫兩個99,這裡的數字9代表的數字,也是一個占位符,表示該位置上以後會是一個數字,為什麼小數點前面會是一個0,而不是9,是因為如果計算結果小于1,那麼隻會顯示小數點和小數點之後的部分,前面的0會忽略掉 

Oracle函數集錦
Oracle函數集錦