SQLでのマルチバイト(全角)のワイルドカード(%, _)

動かないであろうと思った以下のselectがちゃんと動いた。

select * from table
 where TO_MULTI_BYTE(UPPER(COLUMN_NAME)) like TO_MULTI_BYTE(UPPER('%test%'));

http://metroit.hatenablog.jp/entry/2017/05/12/095949

を見ると

  • Oracle のバージョンが11.2.0.3 未満の場合は動作する。
  • Oracle のバージョンが11.2.0.3 以上の場合は動作しない。

とあり、そのものズバリで、動いた環境は10.2.0.2だったのだ。やはり、

select * from table
 where TO_MULTI_BYTE(UPPER(COLUMN_NAME)) like '%' || TO_MULTI_BYTE(UPPER('test')) || '%';

と書くべき。