プロが教えるわが家の防犯対策術!

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

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

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

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

他に方法ありますか?

A 回答 (6件)

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



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

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

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



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'といったデータがあれば、その行も検索されます。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2007/04/02 23:08

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



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

でもOKかと思います。
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2007/03/30 23:32

#1回答者です。



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

この回答への補足

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

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

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

補足日時:2007/03/29 22:58
    • good
    • 0

もしかしたら


A like '2%' And Len(A) = 5
かな?
    • good
    • 0

charに数字データを入れているのですね?


表示はずれていますが、先頭はすべて'2'から始まるのですか?

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

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

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

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!