トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
4-8 文字の検索
SQLパズル
Strテーブル
キー 検索項目
---- --------------
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
こちらを参考にさせていただきました
データ作成スクリプト
create table Str(キー,検索項目) as
select 'A001','01,03,06,09' from dual union
select 'A002','01' from dual union
select 'A003',null from dual union
select 'A004','01,02,03,05,10' from dual union
select 'A005','03,08,10' from dual;
SQL
--■■■instr関数を使う方法■■■
select キー,検索項目,
case when 0 < instr(検索項目,'01')
then 'True' else 'False' end as ア,
case when 0 < all(instr(検索項目,'01'),instr(検索項目,'03'))
then 'True' else 'False' end as イ,
case when 0 < any(instr(検索項目,'01'),instr(検索項目,'03'))
then 'True' else 'False' end as ウ
from Str;
--■■■正規表現を使う方法(10g以降)■■■
select キー,検索項目,
case when 0 < instr(検索項目,'01')
then 'True' else 'False' end as ア,
case when 0 < all(instr(検索項目,'01'),instr(検索項目,'03'))
then 'True' else 'False' end as イ,
case when RegExp_Like(検索項目,'01|03')
then 'True' else 'False' end as ウ
from Str;
解説
Oracle11gR2の正規表現は、先読みが使えないので
条件イでは、instr関数でチュックしてます。