トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

4-1 文字の検索

SQLパズル

テーブル
SKey  SText
----  --------------
A001  01,03,06,09
A002  01
A003  null
A004  01,02,03,05,10
A005  03,08,10

STextは、01、02、03、04、05、06、07、08、09が、
カンマ区切りでセットされている

条件ア  01が含まれる
条件イ  01と03が含まれる
条件ウ  01または08が含まれる
として条件を満たすかを出力する

出力結果
SKey  SText            ア      イ      ウ
----  --------------  ------  ------  ------
A001  01,03,06,09       True    True    True
A002  01                True   False    True
A003  null             False   False   False
A004  01,02,03,05,10    True    True    True
A005  03,08,10         False   False    True

こちらを参考にさせていただきました

SQL

#■■■instr関数を使う方法■■■
select SKey,SText,
case when 0 < instr(SText,'01') then 'True' else 'False' end as "ア",
case when 0 < Least(instr(SText,'01'),instr(SText,'03')) then 'True' else 'False' end as "イ",
case when 0 < greatest(instr(SText,'01'),instr(SText,'03')) then 'True' else 'False' end as "ウ"
from (select 'A001' as SKey,'01,03,06,09' as SText
union select 'A002','01'
union select 'A003',null
union select 'A004','01,02,03,05,10'
union select 'A005','03,08,10') dummy;

#■■■正規表現を使う方法■■■
select SKey,SText,
case when 0 < instr(SText,'01') then 'True' else 'False' end as "ア",
case when 0 < Least(instr(SText,'01'),instr(SText,'03')) then 'True' else 'False' end as "イ",
case when SText RegExp '01|03' then 'True' else 'False' end as "ウ"
from (select 'A001' as SKey,'01,03,06,09' as SText
union select 'A002','01'
union select 'A003',null
union select 'A004','01,02,03,05,10'
union select 'A005','03,08,10') dummy;


解説

MySQL5.0の正規表現は、先読みを使えないので
条件イは、instr関数でチュックしてます