【Oracle】マルチバイト文字のLIKE検索時のORA-01424

| コメント(0) | トラックバック(0)



Oracleで通常、部分一致で検索を行う場合、通常下記のように記述すると思います。



SELECT [column1],[column2] FROM [TABLE] WHERE [column1] LIKE '%[文字列]%';



部分一致で検索をする際に、検索文字列内に「%」、「_」等が含まれた場合にエスケープしてあげる必要があります。

"10%"という文字列の部分一致で検索をかける場合。



SELECT [column1],[column2] FROM [TABLE] WHERE [column1] LIKE '%10¥%%' ESCAPE '¥';



全て半角で検索をかける場合は問題ないのですが、

検索対象文字列内にマルチバイト文字列が含まれる場合、

下記のエラーで終了してしまうケースがあります。



【ORA-01424: エスケープ文字に続く文字がないか、または無効です。】



これはUNICODEが半角文字も2バイトで表現されているのが原因のようです。



■対処方法■

"10%"という文字列の部分一致で検索をかける場合。



SELECT [column1],[column2] FROM [TABLE] WHERE TO_NCHAR([column1]) LIKE TO_NCHAR('%10¥%%') ESCAPE TO_NCHAR('¥');



対応している型であるNVARCHARに変換してあげましょう。



■考察■

最初からDB設計時にNVARCHARを使っていけばいいのかもしれませんが、

半角も2バイト使用することを考えると、

安易になんでもかんでもNVARCHARにしてしまえというのは乱暴だと思います。

そこは扱うデータによって使い分けが必要になってくると思います。

トラックバック(0)

トラックバックURL: http://www.cuore.jp/mt/mt-tb.cgi/17

コメントする