- ベストアンサー
select条件で文字列項目のあいまい検索
SQLServerにてselect文のあいまい検索についての質問です。 char型項目を以下のようにあいまい検索したいのですが、どのように条件を書けばいいのでしょうか? A項目 ----- (1) 21234 (2) 256 (3) 27890 (4) 2 (5) 2378 とデータがあるとします。 結果、(1)と(3)のみ対象としたいのです。 先頭1桁が'2'のものを対象にしたいのですが、 LIKE '2____'とすると、全てselectされてしまいます。 他に方法ありますか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
もう少し、簡潔に書けます。 A LIKE '2___[0123456789]' A LIKE '2___[0-9]' % 0個以上の文字に対応します。 _ 任意の1文字に対応します。 [...] 各カッコ内に指定した文字に対応します。 [^...] 各カッコ内に指定した文字以外に対応します。
その他の回答 (5)
- chukenkenkou
- ベストアンサー率43% (833/1926)
>いまいちどうしてなのかわかっていないのですが・・・ char(5)で定義した場合は、固定長ですから、空白1文字を△とすると、 '21234' '256△△' '2△△△△' のように、5バイトに満たない部分には、後方に空白が入っています。 「LIKE '2____'」では、「先頭が'2'で、何でもいい(=空白でもいい)から4バイトあること」という条件になるため、すべてヒットしてしまいます。 varchar(5)で定義し、無駄な空白を格納しなければ、可変長で格納できます。そのため、「A like '2%' and len(A)=5」という条件を指定すれば、「先頭が'2'で、長さが5バイト」で、末尾まで意味のあるデータが入っている行のみ検索できるようになります。 また、今回採用したという「A LIKE '2___[0123456789]'」では、先頭が'2'で、何らかの値(=空白でも)が3バイトあって、末尾が'0'~'9'」の行だけを検索できます。 したがって、'2△△△9'といったデータがあれば、その行も検索されます。
select ID,a from Table1 WHERE A LIKE '2___[0123456789]' |ID|A____| |--------| |_1|21234| |_3|27890| でもOKかと思います。
お礼
Husky2007さん ありがとうございます。 この方式を採用させていただきました。 けど、いまいちどうしてなのかわかっていないのですが・・・
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1回答者です。 先頭='2'で長さ=5バイトを検索したいなら、charでなくvarcharに格納しては? そうすれば、「A like '2%' and len(A)=5」といった条件で検索可能にできます。
補足
回答ありがとうございます。 ちょっと説明不足でしたね。 おっしゃるとおり、先頭='2'で長さ=5バイトを検索したいのです。 先頭'2'で始まって、5バイト全て埋まっているものがほしいのです。
- chibita_papa
- ベストアンサー率60% (127/209)
もしかしたら A like '2%' And Len(A) = 5 かな?
- chukenkenkou
- ベストアンサー率43% (833/1926)
charに数字データを入れているのですね? 表示はずれていますが、先頭はすべて'2'から始まるのですか? >結果、(1)と(3)のみ対象としたいのです。 >先頭1桁が'2'のものを対象にしたいのです 矛盾することを言っていますけど? データが示されたものしかなく、(1)と(3)だけを検索するなら 「A like '21%' or A like '27%'」 といった条件を指定する必要があります。
お礼
わかりやすい説明ありがとうございます。 理由もわかったので次回からも使えます。