SQLServerでLIKE検索の正規表現を回避する方法
今日データベースで検索を行っていたんですけれど、特定の検索条件がうまく検索できなかったんですよね。
今回は、SQLServerについてです。SQLServerとは、Windowsのデータベースなんですが、最近扱いだしてあまり熟練度が足りないのです。
そこで、ここにも調べたことをかいていきますよ。
今回検索しようとしていた、キーワードは、こちら
[言葉]
なんだそれーって感じですが、[]この括弧がついていない言葉ってキーワードが検索されちゃうんですよね。。。
なんでだろうと調べてみたら、正規表現がSQLServerにはあるみたいです。
カラム LIKE “[言葉]%”
実際のSQLがこれですが、本当は、[言葉]というキーワードを含むデータを検索したかったわけです。
ここには落とし穴があり、それは[]この括弧!
SQLServerでは、[]で囲んだ値を[]内に囲んだ範囲の一文字が検索される正規表現だったわけです。
なので、今回検索した条件は、言か葉を含み、%(0個以上で構成される任意の文字列)が表示されたってこと。
カラム LIKE “言%” OR カラム LIKE “葉%”
上記のSQLで検索したことと同じことになっていました。
回避方法ですが、文字のエスケープを使用します。
カラム LIKE “[[]言葉]%”
これで解決!
%や_以外にもワイルドカードが使えたんですね!知っていると便利だけど、知らないとはまっちゃいそう。。。
正規表現
正規表現ってなんぞや?って方はあまり見ていないと思いますが、一応解説しますと、、、
文字の集まりを1つの文字列で表現する方法の1つです。
言葉にすると難しく聞こえちゃいますね。今回使用している%は、ここはなんでもいいよーってことです。
例えば、
マイン%とすると、
マインクラフトやマインカートなど、マインから始まるデータを検索しちゃえるって感じですね。
データベースに限らず、テキストエディタなどでも使用できる優れもの。
私はSakuraエディタがお気に入りです。使うアプリケーションなどによって、対応するワイルドカードが変わってきますので、お気を付け下さい。
ワイルドカード
正規表現の中で出てきたワイルドカードですが、私はこの言葉Fainal Fantasy11で初めて聞いて覚えた言葉なので、声に出して話をするのが恥ずかしかったりしますが、、、
コルセアの2時間アビィリティなんですよね。どうでもいいですが、、、w
このワイルドカードは、トランプでいうジョーカーです。万能カード!大富豪でも、ジョーカーを使えば、ペアで出せたりしますよね?
感覚としてはこれに似ているんじゃないかなと思っています。階段の間に入れられたり。
コンピュータの世界でいう、ワイルドカードは、特殊文字その一文字で色んな意味を持たせることができるすぐれものなんです。
SQLServerの検索条件のLIKE キーワード
SQLServerのワイルドカードは、これらが使用できるようです。
ワイルドカード | 意味 |
% | 上で説明したとおり、0個以上の文字なんでもって意味 |
_ | これは、1文字なんでもいいよって意味 例えば 山_太郎 とすると、山田太郎さんや、山本太郎さんを検索できます。 1文字っていうのが重要ですね。 山本__ とすると、山本太郎さんや山本次郎さんを検索できます。 あくまで例ですよ!w |
[] | 指定した文字の1文字が当てはまればいいよって意味 例えば 山本[太次三]郎 とすると、山本太郎、山本次郎、山本三郎が検索できます。 あくまで例ですよ!ww |
[^] | 指定した文字の1文字以外が当てはまればいいよって意味 例えば 山本[^次]郎 とすると、山本太郎、山本三郎が検索できます。 あくまで例ですよ!www |
ふーんって感じですよね!でも、知らないとこれが検索条件を邪魔していることに気づけないことになります。。。
私は、すぐに正規表現を疑って検索をしましたが、わからないと検索できない!!!って騒いじゃうことになっちゃいますね。。。
狙って使うと便利なんですけれどね。
文字のエスケープ
これが本題ですよね。
まず、データ内の%って文字を検索したかったり、[]で囲ってある文字を検索したかったりすると思うんです。
[]は、左の[を[]で囲めば、[]を表現できるんです。何言ってるのかわかりませんねwww
上で説明したとおり、[[]文字]%とすると、
[文字]内容
のデータだけを検索することができます。言葉で説明しにくいんですけれど[だけを[]で囲んであげるとLIKE検索に[]を検索できるんです。
%はわかりやすいかな。%はなんでもって意味になってしまうんですが、3%や2%とかのデータ検索したい場合は%っていう文字も検索条件に含みたいですよね。
%は%を[]で囲めば文字として検索することができます。10[%]って書けばいいんです。
_アンダーバーも一緒です。[_]で、アンダーバーも可能です。
最後に
たまには、こーゆーのも書いていかなきゃですね。
私はめっちゃめちゃ詳しい人ではありません。
誰かのためになるように、自分が躓いたことや、気づいたことをこれからも書いていきますね。