• ベストアンサー

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%'」 といった条件を指定する必要があります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 曖昧検索LikeのOR条件

    アクセスでSQLを作成してます。 プロンプトで3つ項目を入力(未入力時はその分を考慮しない) して一致するのを検索する場合 --------------------------- select * from TABLE where 項目名 in ([項目1],[項目2],[項目3]) --------------------------- とする事で出来ました。 ただ、今検索を曖昧検索にしようとしています。 --------------------------- select * from TABLE where 項目名 like ("*" & [項目名1] & "*") or 項目名 like ("*" & [項目名2] & "*") or 項目名 like ("*" & [項目名3] & "*") --------------------------- 上記のようにするとプロンプトで未入力(リターン押下)時に 全てを検索対象にしてしまいます 未入力時は、そのプロンプトの条件自体を無効にしたいです。 何か良い方法はありますでしょうか?

  • 文字型のwhere条件

    Oracleの初心者です、以下のSQL文は、助けてください。 Select * from RTM02AISM where TM02001 >= ' ' and TM02001 <= '゜゜゜゜゜゜゜゜゜゜゜' order by TM02001; TM02001はテーブルの中で11桁の文字型(CHAR)です。 文字型のwhere条件は、' 'と'゜゜゜゜゜゜゜゜゜゜゜' 組み合わせで、全てのTM02001列を表示できますか。 宜しくお願いします。

  • SQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について

    SQLServer7.0で、SELECT文で列を抽出する際なんですが、 列A 列B --------- 1  Null 2  Null 3  1 ↑のテーブルから、列Aの1、2だけを抽出するSELECT文を SELECT * FROM XXX WHERE 列B <> 1 と作成したのですが、うまく動作しません(汗) データが一件も取れないのです。(列B:tinyint型、Null許容) テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。 Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。 それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。 どなたか、ご存知あればアドバイスをお願いします。

  • 空白文字を含む文字列データの検索

    検索したいデータに空白がある時空白のない検索文字列でlike検索して データがヒットするようにしたいです col1 NTTデ ー タ NTTデ - タ シ ス テ ム ズ NTTデ ー タ ク オ リ テ ィ 日立製作所 IBM このようなカラムのデータが入っているとします ※空白を含むデータや空白を含まないデータがあるとします これを select * from table1 where col1 like '%NTTデータシス%' とするとNTTデ ー タ シ ス テ ム ズが検索されるようにしたいと思っています。 replace関数を使って実現しようと思ったのですが SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%' これだとデータがヒットせず単純に表示するときに空白が削除されるだけです どうすれば空白を含むデータを検索することができるでしょうか できれば全角・半角両方を含む文字のデータでも検索できるようにしたいです SQLServer 2005を利用しています。

  • 半角全角混在文字列の空白埋めについて

    現在SQLServer2000のデータを固定長で出力したいと考えています。 項目ごとに固定長にして、カンマ区切りにします。 既定の長さに達しない場合は、それぞれ半角空白で埋めます。 しかしいくつかの項目では、半角と全角が混在しており、うまく想定した形になりません。 項目はnvarchar型です。 SELECT文だけで行う方法を教えて下さい。 よろしくお願いいたします。 例 A(2桁)  B(20桁)    C(20桁) 01    H25/4 入金  確認済み 02    電話済み   〒123-4567

  • 空白文字とスペースの検索

    SQLServer2000を使用してVarchar型の項目に半角スペース1文字のデータを検索した場合、 条件文AAA=''でもAAA=' 'でも抽出されてしまいます。 AAA=''の場合は抽出しないようなSQLServerの設定があるのでしょうか。 何方かご教授お願い致します。

  • ORACLEでLONG項目からCHAR項目へ桁数指定で文字列を抽出

    ORACLEでLONG項目からCHAR項目へ桁数指定で文字列を抽出したいのですが、方法はありますか? LONG項目の先頭から30桁分の文字を抽出し、CHAR項目に入力したいのですが。 会社で使用しているERPパッケージでLONG項目があり、どうしてもこの項目から文字が抽出したいのです。 回答のほど宜しくお願いします。

  • ワイルドカードの検索

    項目に'%'が入力されているデータを抽出したいのですが、 以下のようなSQLだとデータがすべて抽出されていまいます。  SELECT *   FROM t_table  WHERE code_name LIKE '%%%' '%'を検索するにはどうのようにすればいいのでしょうか?

  • SELECT文で列名指定して桁あわせしたい

    SQLServerでSELECT文を発行した場合です。 列名をいくつか指定し、そのうちの1つの列名の桁数をあわせたいのですが良い方法はないですか? select A,B,C from xxtbl  例えばc列が8桁charだったとします。 値が”0”の場合に”00000000”としたいのです。 format指定みたいのはないですか?

  • 条件検索の方法について

    フィールド (name) に「いちごがむ」「いちごじゅーす」「みかんがむ」「みかんじゅーす」がある場合、文字の先頭に『いちご』がつく情報を抽出するsql文は以下になります。 SELECT * FROM test WHERE name LIKE 'いちご%' では、フィールド (name) に「いちご」「みかん」があるとします。 検索文字『いちごがむ』(もしくは『いちごじゅーす』)からnameの「いちご」箇所を抽出するにはどのようなsqlを発行すればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
両面印刷ができなくなった
このQ&Aのポイント
  • MFC-J6995CDWの両面印刷ができなくなりました。お使いの環境はWindows10で無線LAN接続です。関連するソフト・アプリは特にありません。電話回線の種類はひかり回線です。
  • 【MFC-J6995CDW】の両面印刷ができません。お使いの環境はWindows10で無線LAN接続しています。関連するソフト・アプリは特にありません。電話回線はひかり回線です。
  • MFC-J6995CDWの両面印刷ができなくなりました。パソコンのOSはWindows10で無線LAN接続しています。関連するソフト・アプリはありません。電話回線はひかり回線です。
回答を見る