※はてブより引っ越しました。
プログラムを組んでいるときに一つのSQLで済ませたいときってあるじゃないですか。
そこでCase式について考えているときにふとLikeって使えるの?と疑問に思ったので調べてみました!
Case式でLikeの条件は使えるのか
OracleのCase式について調べてみると
www.shift-the-oracle.com
使えるやん!!
「IS NULL」や「IN」、「Like」も記述可能となってます。
それを踏まえて以下のようなコードを考えてみました!
CASE WHEN CODE LIKE 'A%' THEN 'Aコード' WHEN CODE LIKE 'S%' or SAGYOU_CODE LIKE 'E%' THEN 'SEコード' WHEN CODE LIKE 'L%' THEN 'Lコード' WHEN SUBSTR(CODE,5,1) = 'K' or SUBSTR(CODE,5,1) = 'M' THEN 'KMコード' WHEN BUNYA_CODE = '1' THEN '1分野 ' WHEN BUNYA_CODE = '2' AND (SELECT A,Code FROM ATable A WHERE A.JUCHUNO = SUBSTR(A.CODE,0,8)) < 35 THEN '個別分野コード' WHEN BUNYA_CODE = '2' AND (SELECT A,Code FROM ATable A WHERE A.JUCHUNO = SUBSTR(A.CODE,0,8)) > 36 THEN '専門分野コード' ELSE 'その他' END as コード区分
Likeどころかサブクエリまで条件に入れられるなんてCase式凄すぎません?
Thenの後ろにもサブクエリをいれることができます。
そもそもCase式が使えるのはOracle 9以降みたいですね。
まとめ
SEの友達に話したところ「そもそもそれをやるならSQLの設計を考え直したほうがいい」と言われました。
ぐぅの音もでませんね♪