• ベストアンサー

select条件で文字列項目のあいまい検索

SQLServerにてselect文のあいまい検索についての質問です。 char型項目を以下のようにあいまい検索したいのですが、どのように条件を書けばいいのでしょうか?  A項目  ----- (1) 21234 (2) 256 (3) 27890 (4) 2 (5) 2378 とデータがあるとします。 結果、(1)と(3)のみ対象としたいのです。 先頭1桁が'2'のものを対象にしたいのですが、 LIKE '2____'とすると、全てselectされてしまいます。 他に方法ありますか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.6

もう少し、簡潔に書けます。 A LIKE '2___[0123456789]' A LIKE '2___[0-9]' % 0個以上の文字に対応します。 _ 任意の1文字に対応します。 [...] 各カッコ内に指定した文字に対応します。 [^...] 各カッコ内に指定した文字以外に対応します。

その他の回答 (5)

回答No.5

>いまいちどうしてなのかわかっていないのですが・・・ 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'といったデータがあれば、その行も検索されます。

kuriosprj
質問者

お礼

わかりやすい説明ありがとうございます。 理由もわかったので次回からも使えます。

noname#140971
noname#140971
回答No.4

select ID,a from Table1 WHERE A LIKE '2___[0123456789]' |ID|A____| |--------| |_1|21234| |_3|27890| でもOKかと思います。

kuriosprj
質問者

お礼

Husky2007さん ありがとうございます。 この方式を採用させていただきました。 けど、いまいちどうしてなのかわかっていないのですが・・・

回答No.3

#1回答者です。 先頭='2'で長さ=5バイトを検索したいなら、charでなくvarcharに格納しては? そうすれば、「A like '2%' and len(A)=5」といった条件で検索可能にできます。

kuriosprj
質問者

補足

回答ありがとうございます。 ちょっと説明不足でしたね。 おっしゃるとおり、先頭='2'で長さ=5バイトを検索したいのです。 先頭'2'で始まって、5バイト全て埋まっているものがほしいのです。

回答No.2

もしかしたら A like '2%' And Len(A) = 5 かな?

回答No.1

charに数字データを入れているのですね? 表示はずれていますが、先頭はすべて'2'から始まるのですか? >結果、(1)と(3)のみ対象としたいのです。 >先頭1桁が'2'のものを対象にしたいのです 矛盾することを言っていますけど? データが示されたものしかなく、(1)と(3)だけを検索するなら 「A like '21%' or A like '27%'」 といった条件を指定する必要があります。