• ベストアンサー

LIKEで検索

環境 プログラム VB  データベース ACCESS 例えば、年月日が平成14年01月01日~平成14年01月30日靴の売上が1万円以上 または 年月日が平成14年01月01日~平成14年01月30日の売上がスーツが5万円以上の名前が”わ”(頭文字だけ、あ、か等)の人の抽出をしたいのですが、自分が書いたソースを載せるのでご指摘をお願いします。 If IsNumeric(Text1.Text) Then king = CLng(Text1.Text) Else king = 0 End If If IsNumeric(Text10.Text) Then kking = CLng(Text10.Text) Else kking = 0 End If HstrSQL = "SELECT * From 売上 where 年月日 Between '" & MaskEdBox2.Text & "' and '" & MaskEdBox3.Text & "' and 靴 >= " & king & _ " OR 年月日 Between '" & MaskEdBox4.Text & "' and '" & MaskEdBox5.Text & "' and スーツ >= " & kking & _ "AND ふりがな LIKE '" & "[" & Text4.Text & "]" & "%" & "'"

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 ANDとORがたくさん出てくるので、()できちんと括らないとまずいことになりそうです。 "SELECT * FROM 売上 " & _ "WHERE (((年月日 BETWEEN '" & MaskEdBox2.Text & "' AND '" & MaskEdBox3.Text & "')" & _ " AND 靴 >= " & king & ")" & _ " OR ((年月日 BETWEEN '" & MaskEdBox4.Text & "' AND '" & MaskEdBox5.Text & "')" & _ " AND スーツ >= " & kking & "))" & _ " AND (ふりがな LIKE '[" & Text4.Text & "]*')"

その他の回答 (3)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.4

基本的に、ORよりANDのほうが、優先順位が高い(+より*のほうが高いのと同じ。)ので、 SELECT * From 売上 where   ( 年月日 Between <始期> and <終期>    and 靴 >= <サイズ> ) OR   ( 年月日 Between <始期> and <終期>    and スーツ >= <サイズ>    AND ふりがな LIKE <ふりがな> ) ――になってしまいます。 SELECT * From 売上 where (   年月日 Between <始期> and <終期>   and 靴 >= <サイズ> OR   年月日 Between <始期> and <終期>   and スーツ >= <サイズ> ) AND ふりがな LIKE <ふりがな> ――みたいので、どうでしょう。 靴とスーツの<始期/終期>が一緒なら、 SELECT * From 売上 where   年月日 Between <始期> and <終期> AND ( 靴 >= <サイズ> or スーツ >= <サイズ> ) AND ふりがな LIKE <ふりがな>

回答No.2

ANDとORではANDの方が先に判定されてしまうので、 SELECT .... where (年月日 ... スーツ>=" & kking & ") AND ふりがな Like... にすればいいのではないでしょうか?

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

AND ふりがな LIKE '[" & Text4.Text & "]*'" とすれば、 [わ]たなべ みたいな人がひっかかるかと(Text4に「わ」と入れた場合)。

GERRARD
質問者

補足

HstrSQL = "SELECT * From 売上 where 年月日 Between '" & MaskEdBox2.Text & "' and '" & MaskEdBox3.Text & "' and 靴 >= " & king & _ " OR 年月日 Between '" & MaskEdBox4.Text & "' and '" & MaskEdBox5.Text & "' and スーツ >= " & kking & _ "AND ふりがな LIKE '" & "[" & Text4.Text & "]" & "%" & "'" 例えば、靴の'わ'だけを抽出する場合はなるんですけど(靴の場合は" OR 年月日 ~ kking & _ は削除)、靴とスーツを抽出対象にすると'わ'ではなくて全て(五十音)がでてしまうのですがどうしてなのかわからないのでアドバイスをお願いします。

関連するQ&A

  • SQL文 困ってます

    データベースはACCESSになります。 抽出条件なんですけど、フィールドは全て、テキスト型 例、平成14年04月01日~平成14年04月10日で金額が10000円以上のデータを抽出したいのですがどうも金額のところでひっかかっているような気がするので誰か教えてください。ソースを書きます。 HstrSQL = "SELECT * From お買上情報 where 年月日 Between '" & DMLKOK.MaskEdBox2.Text & "'" & "and '" & DMLKOK.MaskEdBox3.Text & "'" & _ "and 金額 >= '" & DMLKOK.Text1.Text & "'" どかおねがいします。すごく困っています。

  • Access2000にての日付検索について

    質問させてください。 フォーム「F応募者一覧」の中にコンボボックスにて” 年1””月1””日”~”年2””月2””日1”を選択し たのちに以下のイベントが組まれているボタンをクリ ックしますと関係ない日まで出てきてしまいます。た とえば2005 2 1 ~ 2005 2 6 にしますと18日とか25日のデータも抽出されてしまいます。年月日 のコンボボックスは値リストにて作成しています。 上手く伝えられていないとは思いますが、よろしく お願い致します。 Year([入社日]) Between [Forms]![F応募者一覧]! [年1] And [Forms]![F応募者一覧]![年2] And Month([入社日]) Between [Forms]![F応募者一覧]! [月1] And [Forms]![F応募者一覧]![月2] And Day([入社日]) Between [Forms]![F応募者一覧]![日] And [Forms]![F応募者一覧]![日1]

  • ループと条件文を使って・・・

    ループと条件文を使ってプログラムを作るのですが、 一日の食費と、何日間生活したいか を入力して、実行すると『○○○円の予算がかかる』というのを友達が作ってくれました。 (友達と一緒に課題を制作することになっているので) 食費を「en」、日数を「hi」、実行した後表示されるラベルを「ans」とすると、 コードは Private Sub Command1_Click() If en.Text="" And hi.Text="" Then ans="数字を入力して下さい" Else       e=en.Text h=hi.Text If IsNumeric(e) And IsNumeric(h) Then For i=1 to h Kotae=kotae + e Next ans="あなたが"& e &"円の食事を"& h &"日間食べるには、"& kotae &"円の予算がかかる。" Else:ans="数字を入力して下さい。" End If End If End Sub となっていました。 私が理解していないのか、このコードでは腑に落ちません… 分かる方、わかりやすく説明していただけたらとても助かります。 また、こうした方がもっといいプログラムになる などアドバイスなどでも結構ですので、 よろしくお願い致します。

  • パラメータ設定で疑問

    Access2000を使っています。売り上げの集計クエリを作りたくて、売上日のフィールドにWhere条件・抽出条件にBetween演算でパラメータを設定してクエリを実行したところ、「データ型が一致しません」というようなエラーメッセージが出てクエリの実行ができませんでした。 抽出条件をよく見たら、Between [開始年月日] AND [終了年月日]と入力したところが、Between "[開始年月日] AND [終了年月日]"となっていました。 抽出条件を何度入力し直してもクエリが実行できず、抽出条件の表示も変わってしまうのですが、原因も対処の仕方もわからず困っています。このような現象について、どなたかお解かりの方がいらしたら、原因・解決方法をご教授ください。

  • Textboxの制御について

    現在年月日をmdbに格納するために Format(Text1(0), "0000") & Format(Text1(1), "00") & Format(Text1(2), "00") とプログラムしているのですが、このままだとインデックス(0)、(1)は空白の場合データがつめられて格納されてしまいます。 そこでIf Text1(0) = "" Then Text1(0).Text = "0000" End If If Text1(1) = "" Then Text1(1).Text = "00" End If と制御しているのですがこれだとTextBoxに0が表示され不具合がでてきてしまうのです、、、 これを防ぐにはどのようなプログラムをくむべきでしょうか、、、

  • or では大丈夫なのにandではダメな理由は?

    or では大丈夫なのにandではダメな理由は? セルA1に2007/10/3を入れ、 2007年ならピンク 2008年なら黄緑 とやろうとして、2つのマクロを作りました。 Macro1では正常に動作するのですが Macro2を実行すると2007/10/3なのに、黄緑になってしまいます。 2008/10/3でMacro2を実行すると何も動きません。 Macro1とMacro2の違いは「or」と「and」の違いだけです。 Sub Macro1() If 39081 >= CLng(Range("a1")) Or CLng(Range("a1")) <= 39447 Then Range("a1").Interior.ColorIndex = 38 ElseIf 39448 >= CLng(Range("a1")) Or CLng(Range("a1")) <= 39813 Then Range("a1").Interior.ColorIndex = 4 End If End Sub Sub Macro2() If 39081 >= CLng(Range("a1")) And CLng(Range("a1")) <= 39447 Then Range("a1").Interior.ColorIndex = 38 ElseIf 39448 >= CLng(Range("a1")) And CLng(Range("a1")) <= 39813 Then Range("a1").Interior.ColorIndex = 4 End If End Sub 「and」なら2007/1/1より大きい なおかつ 2007/12/31より小さい と思い、最初はMacro2を作りましたが、うまくいかない為Macro1を作りました。 でも 「or」だと、2007/1/1より大きい もしくは 2007/12/31より小さい ですよね? 2008/1/1でも「2007/1/1より大きい もしくは 」にヒットしてしまうため、 andにしたのですが、なぜandではうまくいかないのでしょうか? よろしくお願いします。

  • スティーブン・キングの「ランゴリアーズ」の再放送年月日

    スティーブン・キングの「ランゴリアーズ」という海外ドラマですが、NHKで最初に放送されたのが、前編が平成9年12月29日、後編が平成9年12月30日だと分かったのですが、このドラマは2003年ないし2004年くらいにも再放送されています。再放送された正確な放送年月日を教えてください。

  • ユーザーフォームでの任意の文字を含む検索について

    初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作りました。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシートに作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 このサイトで教えていただき、以下のようなプログラムで 検索することができました。 しかし、テキストボックス1の文字が完全に一致すれば結果は出るのですが、 文字を含むものを検索するように改良したいのですがどのようにすればいいのか 分からず困っています。 よろしくお願いいたします。 ************************** Private Sub CommandButton1_Click() Dim res  If TextBox1.Text <> "" Then   res = Application.Match(TextBox1.Text, Sheets("データ").Columns(4), 0)   If IsNumeric(res) Then    TextBox2.Text = Sheets("データ").Cells(res, "A").Value   Else    TextBox2.Text = "Not Found"   End If  Else   TextBox2.Text = ""  End If End Sub

  • SQL

    テーブル名があああでフィールドがコードと終了日。 コードが例えば 0番から10番でさらに終了日が 10日から20日という感じにしたいのですが、 構文エラー、演算子がありませんとでます。 下記がソースです。 SstrSQL = "SELECT * From あああ where コード between '" & .Text1(0).Text & "'" & " and '" & .Text1(1).Text & "'" & _ " and 終了日 '" & FHizuke & "'" & " and '" & GHizuke & "'" & _ "order by あああ ASC"

  • 0をNULLへ

    Visual Basic6について質問です。 空白のときにテキストボックスに数字の0がはいるように、 年月日日 = Format(Val(Text(0).Text), "0000") & Format(val(Text(1).Text), "00") & Format(val(Text(2).Text), "00") とう制御をしています。 フォームロードで以下の処理を実行すると0000や00の場合テキストボックスに0が入ってしまいます。 これを防ぎたいのですが0がはいったときはNull空白にする方法はありますか? If 年月日 <> "" Then Text(0).Text = CInt(Mid(年月日, 1, 4)) Text(1).Text = CInt(Mid(年月日, 5, 2)) Text(2).Text = CInt(Mid(年月日, 7, 2)) Else Text(0).Text = "" Text(1).Text = "" Text(2).Text = "" End If

専門家に質問してみよう