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

4-1 文字の検索

SQLパズル

テーブル
キー  検索項目
----  --------------
A001  01,03,06,09
A002  01
A003  null
A004  01,02,03,05,10
A005  03,08,10

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

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

出力結果
キー  検索項目           ア      イ       ウ
----  --------------  ------  ------  ------
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

select キー,検索項目,
case when position('01' in 検索項目) > 0 then 'True' else 'False' end as ア,
case when 検索項目 ~ '^(?=.*01)(?=.*03)' then 'True' else 'False' end as イ,
case when 検索項目 ~ '01|03' then 'True' else 'False' end as ウ
from (select 'A001' as キー,'01,03,06,09' as 検索項目
union select 'A002','01'
union select 'A003',null
union select 'A004','01,02,03,05,10'
union select 'A005','03,08,10') dummy;


解説

条件イのチェックに、正規表現の先読みを使ってます