SQL LIKE演算子で抽出できない

このQ&Aのポイント
  • VB6でAccess2003のテーブルから情報を抽出する際、SQLのLIKE演算子を使用して「東京都」から始まるレコードを抽出しようとしたが、抽出できなかった。
  • 「東京都千代田区」や「東京都新宿区」といった具体的な地域名を入力すると、該当するレコードが抽出されるが、単純に「東京都」と入力すると抽出されない問題が発生した。
  • 問題の原因は、SQLのLIKE演算子の使い方にある。正しくその使い方を理解することで、意図したレコードを抽出することができる。
回答を見る
  • ベストアンサー

SQL LIKE演算子 抽出できない

VB6でAccess2003のテーブルから情報を抽出したいと思っています。 「東京都千代田区」、「東京都新宿区」と入力するとそれらに該当 するレコードが全て抽出されてきます。しかし「東京都」だけ入力して 「東京都」から始まるレコードを全て抽出しようと「%」を使用して書換えました所、なにも抽出できなくなりました。 Set DB = OpenDatabase("c:\SalesManager\jdb.mdb") strSQL = "SELECT * FROM t_USER " strSQL = strSQL & "WHERE KOKYAKUMEI LIKE "   strSQL = strSQL & "'" & "%" & txtUser.Text & "%" & "'" 初歩的な質問で申し訳ございませんが、ご教授頂きたく思います。 よろしくお願いします。 「%」を使用しなかった時のコード strSQL = strSQL & "'" & txtUser.Text & "'"

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

  • ベストアンサー
  • invalid
  • ベストアンサー率61% (67/109)
回答No.1

Access2003でLikeを使うとき % ではなく * で任意指定かな。 東京都% ⇒ 東京都* としてみてください。

hirokaz200
質問者

お礼

東京都%→東京都*にして見ました所 一発解決いたしました。 1日格闘した事が、一瞬で解決いたしました。 確かに、私が使用している参考書はoracleをベースにSQLを 解説している本でした。 本当にありがとうございました。

関連するQ&A

  • SQLが思うように抽出されなくて困っています。

    MySQL のJavaです。 パラメータに、iPara_food_idとiPara_kind_idを与え、 1)comment_textが、null か、空っぽで、 2)limit_date が最大、 3)のレコードを1件抽出したいのですが、 String strSQL = "SELECT record_id, color_id FROM foods" + " WHERE" + " (food_id = " + 123455/*iPara_food_id*/ + ")" + " AND (kind_id = " + 1545334/*iPara_kind_id*/ + ")" + " AND (comment_text IS NULL) OR (LENGTH(comment_text) = 0)" + " AND (delete_flag = false)" + " ORDER BY limit_date DESC" + " LIMIT 1"; テーブルとソースを何度も見直したり、 値を変更してみたり、 パラメータの値を変更してみたり、 したのですが、 パラメータに、iPara_food_idとiPara_kind_id。 何を与えても、同じレコードを抽出してきます。 それは、30件ほどのレコードの中で、 日付が途中くらいのもので、comment_text が空の ものです。 comment_textが空のレコードは、 2件あるのですが、 固定で抽出してくるレコードは、 日付の大きいほうです。 なぜ、パラメータが聞かないのでしょうか? ※上記、思い切って、むちゃくちゃな、数値を  指定していますが、それでも、同じレコードを  抽出してきます。

    • ベストアンサー
    • MySQL
  • access2007 VBA データの抽出SQLがわかりません。

    access2007 VBA データの抽出SQLがわかりません。 下記のように記述しているのですが、Aテーブルから必要なデータが抽出できません。どなたかご教授いただけますか。 ※ 「Me.txtSEQ前.Value」「Me.txtSEQ後.Value」はテキストコントロールです。プロパティでの書式設定は何もしていません。 ========================================= Dim intSEQ前 As Long Dim intSEQ後 As Long 'テキストコントロールなので、数値型にする。 '分かりやすくするために、ここで定義しています。 intSEQ前 = CLng(Me.txtSEQ前.Value) intSEQ後 = CLng(Me.txtSEQ後.Value) 'データを抽出します 'intSEQ前からintSEQ後に入力された数値を抽出する。 strSQL = "SELECT " strSQL = strSQL & "* " strSQL = strSQL & "FROM Aテーブル " strSQL = strSQL & "WHERE 県コード=1 " strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " strSQL = strSQL & "ORDER BY SEQ " Set objRs = myDB.OpenRecordset(strSQL, dbOpenSnapshot) ※下記をコメントアウトするとデータは正しく抽出されているようです。 strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " 以上。よろしくお願い致します。

  • Yes/Noフラグの値をコピーできない

    すいません。ACCESS2003 VBAで下記の問題で困っています。 新たに作成したmdbファイル(テーブルの中身は空)に既存のmdbファイルのテーブル内容をコピーしたいのですが、Yes/Noフラグ型だけ移行できません。一応サンプルのソースです↓ Dim db As DAO.Database Dim RS As DAO.Recordset Dim strsql As String コピー元のmdbファイルをオープン Set db = OpenDatabase("コピー元mdb") 'SQLの生成 strsql = "" strsql = strsql & " SELECT * FROM テーブル名" 'レコードセット生成 Set RS = db.OpenRecordset(strsql, dbOpenSnapshot, dbReadOnly) 'コピー元テーブルにデータがあるか判定 If RS.RecordCount = 0 Then msgbox "データがありません" Else RS.MoveFirst 'コピー先のデータベースを設定 Set db = OpenDatabase("コピー先mdb") 'レコードの初期化 db.Execute (DELETE FROM コピー先テーブル名) Do While RS.EOF = False strsql = "" strsql = strsql & " INSERT INTO コピー先テーブル名(" strsql = strsql & " ,コピー先のYes/Noフラグ値" ' strsql = strsql & ")VALUES(" strsql = strsql & " ,'"コピー元のYes/Noフラグ値 "' " strsql = strsql & ")" db.Execute (strsql) RS.MoveNext Loop End If RS.Close db.Close

  • SQL文のWHERE句でエラー

    Access2000のMDBをADOで読み込もうとしていますが、WHERE句を指定すると例外が発生します。 strSQL = "SELECT * FROM Q住所録 ORDER BY [カナ]"; strWhere = "([カナ] Like \'ア*\')"; strSQL += " WHERE " + strWhere; ウォッチウィンドウでstrSQLを確認すると {"SELECT * FROM Q住所録 ORDER BY [カナ] WHERE ([カナ] Like 'ア*')"} とちゃんとなっていますが、 varTName = _T(strSQL); hr = pRs.CreateInstance( __uuidof( Recordset)); pRs->Open( varTName, _variant_t((IDispatch *)pdb), adOpenDynamic, adLockReadOnly, dCmdUnknown); でオープンすると例外が出ます。 エラーの内容は IDispatch error #3092 となっています。 WHRERE句をしていなければ全レコードがちゃんと表示されます。 WHERE句は使えないんでしょうか。 Filterプロパティの使い方もよくわかりません。 レコードの抽出の方法を教えてください。

  • SQLとDAOで取得するレコード件数が違う?

    Access2007でSQLで実行した結果と、レコードセットで取得した件数が一致せずに困っています。 いろいろ調べてはみたのですが、なぜかわかりません。 よろしくお願いします。 ○TableA 型 Code1 数値型(主キー) Text テキスト型 Code2 数値型 ○TableA データ Code1 Text Code2 111 AAA 10 112 BBB 15 113 CCC 20 114 DDD 20 ○VBAコード Dim strSQL As String Dim db As DAO.Database Dim rstFind As DAO.Recordset strSQL = "SELECT * FROM TableA Where Code2 = 20" Set db = CurrentDb() Set rstFind = db.OpenRecordset(strSQL, dbOpenSnapshot) MsgBox rstFind.RecordCount この状態でSQLビューから実行すると2件が抽出され、上記VBAを実行するとMsgBoxには「1」と表示されます。

  • アクセスに登録した値を条件検索によりtextboxに反映させる方法を教えてください。

    はじめまして。お世話になります。 Accessで登録した値をVBのフォーム上のテキストボックスに 反映させる方法を教えてください。 [Accessのファイル名] db1.mdb [db1.mdbのテーブル名] ListName [ListNameの各項目] 日付、名前、住所、生年月日 [VBのフォーム] lbldate、text1.textbox、text2.textbox、text3.textbox、Select.command ※lbldateの内容は日付(テキスト型)でCaptionでとってきた値が「日付」項目に登録される。 3つのtextboxには入力した値は「名前」・「住所」・「生年月日」項目に登録される。(すべてテキスト型) [自分で調べ考えたコーディングの内容] Microsoft DAO 3.6 Object Library参照設定 Private Sub Select_Click() Dim strSQL As String Dim dbs As DAO.Database Dim myset As DAO.Recordset Dim ws As DAO.Workspace Set ws = DBEngine.Workspaces(0) Set dbs = ws.OpenDatabase("C:\db1.mdb") Me.AutoRedraw = True strSQL = "SELECT * FROM Listname where 日付 = '" & lbldate & "'; " Set myset = dbs.OpenRecordset(strSQL) Text1.Text = CStr(myset("名前")) Text2.Text = CStr(myset("生年月日")) Text3.Text = CStr(myset("住所")) myset.Close End Sub 上記の内容では上手くいきません。過去にテキストボックスに入力した値を教えていただきましたが今回は逆にレコードを検索して選択する方法が上手くいきません。 アドバイスをよろしくお願い致します。 ※求める機能としてlblnameに表示される値を条件にそれに対応するレコードを選択したいのですが検索時に該当する日付がなかった場合は3つのテキストボックスに値を何も返さないプログラムにしたいと思っています。よろしくお願い致します。

  • LIKEを使用したレコード抽出について

    OracleでLIKEを使用したレコード抽出で困っています。 あるテーブル(TAB_A)が以下のような属性だとします。 ------------- COL1 CHAR(5) COL2 CHAR(5) このとき、このテーブルに次のようにデータが格納されています。 COL1  COL2 -------------- ABC==  12345 [=]は便宜上1バイトスペースを表す このテーブルを対象として (1) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC%'; (2) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC==';   ([=]は便宜上1バイトスペースを表す) (3) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC'; というSQLを発行した場合に、いずれもレコードが抽出されてしまいます。(1)(2)の場合は当然だとは思うのですが、(3)でもレコードが抽出されることが理解できません。このようなことが起こり得るのでしょうか。

  • テキストからの抽出

    こんにちは -------------------------------------- お名前:あいうえお 郵便番号:100-0001 ご住所:東京都千代田区千代田1-1      電話番号:03-****-1234 -------------------------------------- というテキストをA列に貼り付け、 B列に 1│あいうえお 2│100-0001 3│東京都千代田区千代田1-1 4│03-****-1234 の、ように内容を表示したいのですが、 どのような方法があるでしょうか。

  • 期間集計を日別集計にしたい

    DBはアクセス(.mdb)です。 現在のSQL構文です。。。 strSQL = "SELECT COUNT (*) From DB1 " strSQL = strSQL & "where 条件その1 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 条件その2 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 日時 BETWEEN #" & (開始日時を格納した変数) & "# AND #" & (終了日時を格納した変数) & "#" rs.Open strSQL, cn SU = rs.Fields(0).Value 上記のPGで変数「SU」に、SQL文で設定した条件に該当 するレコード数を代入していますが、これではあくまで 開始日時と終了日時の間に存在するトータルレコード数 、言わば「期間合計」になってしまいますよね。 現在行いたい内容ですが、開始日時と終了日時の間の日 付を1日ごとに分割し、その1日ごとでのレコード数が分 かる、「日別合計」処理をさせるようにしたいのですが。 やっぱり上記のSQL文を根本から考え直さないと出来ない でしょうか?出来れば、なるべく残しつつ、後の方で加工 できればいいなぁと思っているんですが。。。 よろしくお願いします。

  • 文字からリストとの完全一致部分を抽出したい

    テキストからリストと合致する一文を抽出したいです 例文:セルB1 「私は東京都千代田区1-1に住んでいます」 リスト:セルA1 東京都千代田区     セルA2 神奈川県横浜市     セルA3 埼玉県秩父市     (以下続く) 結果:セルC1 東京都千代田区 例が分かりづらくて申し訳ありません・・・。 とにかくリストと完全一致する部分だけを抜き出したいんです! なにか適当な関数はないものでしょうか?