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;//擷取整數部分;
格式一: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會忽略掉