プロプログラマ

プログラマーを職業としてます。 Flex,Air,C#,Oracle,HTML+JSの言語ノウハウを中心に情報発信していきます

SQL ServerのLike指定に注意

Where句にLikeを使用するときの注意についてです。

 

例えばテーブルとして、
TestTable
T_EMPLOYEE
T_USER
の3テーブルが存在するとします。

sysobjectから”T_”で始まるテーブル名を検索したい場合、name like ‘T_%’ などとやりがちです。
ですが、これを実行すると、”T”から始まるものが全て対象になってしまいます。

SELECT name FROM sysobjects WHERE
name Like 'T_%'


3テーブルともヒットしてしまいます。
・TestTable
・T_EMPLOYEE
・T_USER

これは、”_”がワイルドカードとして認識されるためです。
“_”は1文字の何かという意味になります。

 

そのため、”_”を文字として扱う場合、
以下のように工夫する必要があります。

SELECT name FROM sysobjects WHERE
name Like 'T[_]%'


・T_EMPLOYEE
・T_USER
の2テーブルのみがヒットします。

たまたまこれに合致するレコードがない場合、間違いに気づかない場合があります。
Like句を使用するときは注意しましょう。

 

※※Oracleでは書き方が違います。※※

select table_name from user_tables where
table_name like ’T\_%' escape ' \'

エスケープ文字として何を使うかを明示する必要があります。ココでは”\”を指定しています。
SQLServerの時と同じ書き方をしてもエラーにはなりませんが、結果は別物になります。

 

== ランキングに参加しています。ぜひクリックお願いします ==

プログラム ブログランキングへ
にほんブログ村 IT技術ブログへ
にほんブログ村

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください