ワイルドカード文字
Oracleのワイルドカード文字には『%(複数文字)』と『_(単一文字)』の2つがあります。これらを検索するにはエスケープ文字を使う必要があります。ワイルドカード『%』はメジャーですが、『_(アンダーバー)』は意外と知らない人多いようですね。
-- 検証データ
SQL> select * from ex03 order by lno
  2  ;
   LNO     ITEM_ID          NAME
______ ___________ _____________
     1 SU_38       六角ボルトステンレス
     2 ME_38       六角ボルト鉄
     3 PEL8100     ドライバ+
     4 MEL8100     ドライバ-
     5 ME_38%20    六角ボルト鉄20mm
-- 「6角ボルト鉄」を検索するべく'ME_'始まりのコードを検索したつもりが
-- 以下SQLでは意図した結果になりません。
SQL> select * from ex03 where item_id like 'ME_%' order by lno;
   LNO     ITEM_ID          NAME
______ ___________ _____________
     2 ME_38       六角ボルト鉄
     4 MEL8100     ドライバ-
     5 ME_38%20    六角ボルト鉄20mmアンダーバー(_)を対象にワイルドカード検索するには
select * from ex03 where item_id like 'ME@_%' escape '@' order by lno ;
パーセント(%)を対象にワイルドカード検索するには
select * from ex03 where item_id like '%@%%' escape '@' order by lno ;
ワイルドカード文字を対象に検索した結果
以下例では「@」をエスケープ文字に使用していますが、検索に支障のでない範囲で別の文字にする事も可能です。
SQL> select * from ex03 where item_id like 'ME@_%' escape '@' order by lno
  2  ;
   LNO     ITEM_ID          NAME
______ ___________ _____________
     2 ME_38       六角ボルト鉄
     5 ME_38%20    六角ボルト鉄20mm
SQL> select * from ex03 where item_id like '%@%%' escape '@' order by lno
  2  ;
   LNO     ITEM_ID          NAME
______ ___________ _____________
     5 ME_38%20    六角ボルト鉄20mm
SQL>検証データは以下の通り
create table ex03 (lno number,item_id varchar2(20),name varchar2(30)) ; insert into EX03 (LNO, ITEM_ID, NAME) values(1, 'SU_38', '六角ボルトステンレス'); insert into EX03 (LNO, ITEM_ID, NAME) values(2, 'ME_38', '六角ボルト鉄'); insert into EX03 (LNO, ITEM_ID, NAME) values(3, 'PEL8100', 'ドライバ+'); insert into EX03 (LNO, ITEM_ID, NAME) values(4, 'MEL8100', 'ドライバ-'); insert into EX03 (LNO, ITEM_ID, NAME) values(5, 'ME_38%20', '六角ボルト鉄20mm');
 
  
  
  
  
