こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

SQLServerにてselect文のあいまい検索についての質問です。

char型項目を以下のようにあいまい検索したいのですが、どのように条件を書けばいいのでしょうか?

 A項目
 -----
(1) 21234
(2) 256
(3) 27890
(4) 2
(5) 2378

とデータがあるとします。
結果、(1)と(3)のみ対象としたいのです。
先頭1桁が'2'のものを対象にしたいのですが、
LIKE '2____'とすると、全てselectされてしまいます。

他に方法ありますか?

投稿日時 - 2007-03-29 17:50:38

QNo.2876822

すぐに回答ほしいです

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

もう少し、簡潔に書けます。

A LIKE '2___[0123456789]'
A LIKE '2___[0-9]'

% 0個以上の文字に対応します。
_ 任意の1文字に対応します。
[...] 各カッコ内に指定した文字に対応します。
[^...] 各カッコ内に指定した文字以外に対応します。

投稿日時 - 2007-04-02 08:09:13

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.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'といったデータがあれば、その行も検索されます。

投稿日時 - 2007-03-31 03:46:37

お礼

わかりやすい説明ありがとうございます。

理由もわかったので次回からも使えます。

投稿日時 - 2007-04-02 23:08:03

select ID,a from Table1 WHERE A LIKE '2___[0123456789]'

|ID|A____|
|--------|
|_1|21234|
|_3|27890|

でもOKかと思います。

投稿日時 - 2007-03-30 08:20:55

お礼

Husky2007さん
ありがとうございます。

この方式を採用させていただきました。

けど、いまいちどうしてなのかわかっていないのですが・・・

投稿日時 - 2007-03-30 23:32:45

ANo.3

#1回答者です。

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

投稿日時 - 2007-03-29 19:08:56

補足

回答ありがとうございます。

ちょっと説明不足でしたね。

おっしゃるとおり、先頭='2'で長さ=5バイトを検索したいのです。
先頭'2'で始まって、5バイト全て埋まっているものがほしいのです。

投稿日時 - 2007-03-29 22:58:50

ANo.2

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

投稿日時 - 2007-03-29 18:41:47

ANo.1

charに数字データを入れているのですね?
表示はずれていますが、先頭はすべて'2'から始まるのですか?

>結果、(1)と(3)のみ対象としたいのです。
>先頭1桁が'2'のものを対象にしたいのです

矛盾することを言っていますけど?

データが示されたものしかなく、(1)と(3)だけを検索するなら

「A like '21%' or A like '27%'」

といった条件を指定する必要があります。

投稿日時 - 2007-03-29 18:04:36

あなたにオススメの質問