1. 程式人生 > >oracle中case when的用法總結(case when like功能)

oracle中case when的用法總結(case when like功能)

最近大量用到了oracle的sql語句中的case when,閒下來就整理一下。
1.根據類別統計
假設現在有一組資料如下
這裡寫圖片描述
其中,0表示單選題,1表示多選題,現在分別要統計單選題跟多選題的數目,就可以這麼做啦
select sum(case t.type when 0 then 1 else 0 end), sum(case t.type when 1 then 1 else 0 end) from Question t;

2.合併資料型別不同的兩列(數字型跟字串型)
假設現在又有一組資料如下
這裡寫圖片描述
假設支付寶裡的餘額跟微信裡的餘額是互補的,且支付寶餘額是number型,微信餘額是varchar型的,現在需要將兩列合併,就可以這麼這麼來做啦
select (case t.zfb
when 0
then ”
else
”||t.zfb end)||t.wx
from Table t;

”||t.zfb這個的意思就是把number型的欄位轉換成varchar型。
結果就是兩組餘額的和啦。

那個備註一下哈,上面的是兩個單引號,左單‘和’右單。

3.正則拆分取第一個字串
假設有一個欄位data,值是aaa,bbb,ccc,現在只需要取第一個值,就可以用REGEXP_SUBSTR()這個函式
select REGEXP_SUBSTR(t.data,’[^,]+’,1,1,’i’) as a from table t;
這樣就可以取到aaa啦,如果是拿最後一個值的話,就這麼寫
select REGEXP_SUBSTR(t.data,’[^,]+’,1,3,’i’) as a from table t;

4.case when裡的like功能
假如要用到case when又要用到like這樣的功能,即如果字串包含‘語文’就怎麼怎麼樣,包含‘數學’就怎麼怎麼樣,包含‘英語’就怎麼怎麼樣,like是用於where中的,放在case when裡面是無效的,可以用instr()這個函式來查詢這些字元出現的位置,代替like的功能,這樣寫就好吶。
case when instr(t.str,’語文’) > 0 then 0
when instr(t.str,’語文’) > 0 then 1
when instr(t.str,’語文’) > 0 then 2
else 3 end
另外在多表查詢時,一開始我喜歡用in,在執行了一段時間後報出了ora-1几几幾數字型別不正確的錯誤,分析了一下估計是in的括號裡的資料太多的緣故,所以儘量不要用in,用關聯查詢就可以了。

5.附加日期區間
兩個日期之間我喜歡這麼寫
to_char(t.operate_time,’yyyymmdd’) between ‘20170203’ and ‘20170206’
我發現別人是這麼寫的
t.operate_time > to_date(‘20170203’, ‘yyyymmdd’)
and t.operate_time < to_date(‘20170207’, ‘yyyymmdd’)
請注意兩種寫法後面一個日期的寫法,第二種寫法加了一天,如果不加就會少一天,因為是小於嘛。
寫法都一樣啦,借鑑一下