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の時と同じ書き方をしてもエラーにはなりませんが、結果は別物になります。
== ランキングに参加しています。ぜひクリックお願いします ==
正確なTIMESTAMP値を取得したい場合は、SYSDATETIME()を使う Windows8が勝手にスリープを解除する