purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

SQL文で比較とか文字列検索とか

いつもやってる運用のやつで

何かちょっと面倒になったので、もっと効率上げようと久しぶりにSQLをいじってみることにした。


基のDBはOracleか、SQL Sserverか何か良くわからないけど、フロントはAccessで動かしてるので
そこの中で処理したのです。


という事で関数メモです。


Switch関数(分岐処理)

式: Switch(式1,値1,式2,値2,...,True,"それ以外")


【使用例】(今回はサブクエリを使ってINSERTしたので)

INSERT INTO テーブル1 ( 表示順 )
SELECT Switch( 商品区分ID=1,"1", 商品区分ID=3,"2", 商品区分ID=5,"3", 商品区分ID=6,"4",True,"")
FROM テーブル2;

ここでやってることは、
商品マスタの商品区分IDが1だったら、表示用テーブルの表示順は1
商品マスタの商品区分IDが3だったら、表示用テーブルの表示順は2
商品マスタの商品区分IDが5だったら、表示用テーブルの表示順は3
商品マスタの商品区分IDが6だったら、表示用テーブルの表示順は4



参考サイト:
Switch関数:東京/東京都港区(プロフェッサ)
Switch関数の書き方と使用例
AccessじゃなければCASE文というのもあるよ。


IIF関数(分岐処理)、INSTR(文字列検索)

式: IIF(評価対象, 真 ,偽)


式: INSTR(開始位置,検索対象,検索文字列,比較方法)
   ※開始位置、比較方法は省略できます。


   検索文字列が見つかると、何文字目で見つかったかが帰ってきます。無ければ0が帰ってきます。


【使用例】(動作確認してないけど・・・)

INSERT INTO 表示用テーブル ( 作者名ONOFF )
SELECT IIf(INSTR(商品名,'/')>0,'1','')
FROM 商品マスタ;

ここでやってることは、商品名の中に/があれば作者名も入っているものとみなし、
表示用テーブルの作者名ONOFFに1を、無ければ0を入れます。



参考サイト:
IIf関数:東京/東京都港区(プロフェッサ)
IIf 関数…:一日一見
INSTR、INSTRB - Oracle SQL 関数リファレンス