• ベストアンサー

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 & "'" どかおねがいします。すごく困っています。

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

  • ベストアンサー
  • mfuku
  • ベストアンサー率50% (173/345)
回答No.5

> " and 金額 >= king & _ > ってすると、一つ以上の必要なパラメータの値が設定されていません。とでます。 変数名をSQLに直接埋め込んでも解釈してくれません。 また、金額のテキストボックスが未入力の場合など、Long型に変換できなかった場合の対処も必要です。 従って、例えば、 dim king as long If IsNumeric(dmlkok.text1.text) Then king = clng(dmlkok.text1.text) Else king = 0 End If HstrSQL = "SELECT * From お買上情報 where 年月日 Between '" & DMLKOK.MaskEdBox2.Text & "' and '" & DMLKOK.MaskEdBox3.Text & "' and 金額 >= " & king という形にしてください。

その他の回答 (4)

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

こんにちは。maruru01です。 金額が文字列型だとまずいことになります。 例えば、 数値型で、 金額 >= 200 なら、1000は該当しますが、 文字列型で、 金額 >= '200' なら、1000は該当しません。 つまり上の例では、文字列型の"200"は、文字の"2"と"0"と"0"の集まりなので、先頭から文字を比較して、"1000"の"1"よりも"200"の"2"の方が大きい(文字コード)と判断するわけです。 早い話、 100.txt 200.txt 1000.txt というファイルをファイル名順(昇順)に並べると、 100.txt 1000.txt 200.txt という順になるのと同じことです。 金額などの数値は、数値型にすることをお奨めします。 では。

GERRARD
質問者

補足

数値型にすると書き方は(小数点は考えない) dim king as long king = clng(dmlkok.text1.text) " and 金額 >= king & _ ってすると、一つ以上の必要なパラメータの値が設定されていません。とでます。 *数値型だと書き方が分からなかったので,テキスト型にしてました。

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.3

#2の者です。 失礼いたしました。 > 抽出条件なんですけど、フィールドは全て、テキスト型 ということで、「金額」とはいえども文字型なんですね・・。 #1の方の指摘が原因かと思われます。

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.2

#1の方の指摘に加えて、 金額であるにも関わらず「'」が入っているのも気になります。 「'」で囲む必要があるのは文字型のフィールドです。

  • sienna
  • ベストアンサー率35% (51/145)
回答No.1

「and」 の前後にスペースが入っていないとかじゃないですよね。

関連するQ&A

  • 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 & "]" & "%" & "'"

  • date型を年月で指定するSQL文

    初歩的な質問かと思いますが… ご質問失礼いたします。 SQL文で2000年の1月を表示させたい時、 SELECT * FROM syouhin WHERE nengatsuhi BETWEEN '2000/1/1' AND '2000/1/31 というように、BETWEENではなく、 SELECT * FROM syouhin WHERE nengatsuhi = ?? BETWEENを使わずに2000年1月だけを指定することは可能でしょうか?

    • ベストアンサー
    • MySQL
  • SQL

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

  • VB.NETのSQL文について

    質問失礼します。 VB、SQLともに勉強しはじめて日が浅い初心者ですが、どなたかお力をお貸しください。 データベースに登録しているデータをNPOIを使って、出力したいと考えています。 DataTableを使用して作りましたが、上手くできない部分があります。 テーブルのカラムは、社員番号、事務物販名、登録数、登録日、更新日のようなものが入っているイメージです。 登録日を検索して、全てのテーブルを抽出したいのですが、○月○日〜○月○日にデータを登録した人というときに、つまづいてしまいました。 SQL.Append("SELECT " ) ・ ・ SQL.Append("WHERE ") SQL.Append(" 登録日 BETWEEN パラメータ1 AND パラメータ2 ) のように、書いたところ問題なく、出力されました。 パラメーターの部分は、DateTimePickerコントロールを配置して、日付を入力した値を設定しています。 2023/1/1 と 2023/1/2と2つ入力して、この2日間のデータを出そうとしたところ、1/1の文しか出力されませんでした。 原因は、データベースに入っているのは、Date型で、YYYY/MM/DD HH:mm:SS形式でした。 1/2の0時以降は、該当データに含まれないということは分かっているのですが、それを含めてのSQLの書き方がわかりません。 単純にSQLを書くには、 BETWEEN 2023/1/1 AND 2023/1/2 23:59:59 で、2日の文を抽出されますが、VBに書く時がうまくできない状態で、 時間の部分を、結合すれば良いのかと思い、 SQL.Append("SELECT " ) ・ ・ SQL.Append("WHERE ") SQL.Append(" 登録日 BETWEEN パラメータ1 AND パラメータ2 II '23:59:59' ") と、DataTimePickerから持ってきた、パラメータの日付に時間を結合してみたところ、ダメでした。 型の問題なのか、よくわからず、勉強している状態です。 基礎がなっておらず、初歩的なミスかと思いますが、ご指導ください。 データベースはOracleを使用しています。

  • SQLの条件文

    以下のデータで、dataで始まり、かつ数値部分を100~300の範囲で抽出したいと考えています。 テーブル名はtable1、フィールド名はretuです。 -retu- data023 unknowndata data105 data203 data827 SELECT retu FROM table1 WHERE retu LIKE 'data%' AND CAST(RIGHT(retu,3) AS Int) BETWEEN 100 AND 300 上記のSQLを作ってみたのですが、これだとunknowndataに対してCASTが行われてしまうらしく、CASTが失敗してデータを取り出すことができませんでした。 正しくデータを取り出すためには、どのように記述すれば良いでしょうか?

  • SQL文がうまく通らないのですが

    プログラミング初心者です。ご指導お願いします。 以下のセレクト文を作ったのですが、SQL文がうまくできません。 select ~~~~(省略) AND DELIVERY_DATE between " + fromYear + fromMonth + " and " + toYear + toMonth; 表示はこうなります AND DELIVERY_DATE between 20084 and 20086; 年と月が区別されないみたいなのですが、 どう直せばよろしいですか? 一人で勉強していて、詰まってしまい質問させていただきました。 助けていただけるとありがたいです。

  • SQL文を教えてください。

    MYSQLを使っています。 【売上テーブル】 || 日付 || 金額 || ----------------- || 2011/01/01 || 100 || || 2011/01/01 || 200 || || 2011/01/02 || 600 ||           ・           ・           ・ || 2012/12/31 || 500 || || 2012/12/31 || 100 || SELECT SUM(金額) FROM 売上テーブル WHERE 日付 BETWEEN '2011-01-01' AND '2011-12-31' GROUP BY DATE_FORMAT(日付, '%Y/%m') で月初から月末のデータを表示させることはできますが、 2011/01/10~2011/02/09を一か月として 以降は 2011/02/10~2011/03/09 2011/03/10~2011/04/09        ・        ・        ・ 2011/12/10~2012/01/09 といった感じに1年間のデータを表示させる方法がわかりません。 どうぞ宜しくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文について

    テーブルの結合について教えてください。 (DBはオラクルです) select * from table1,table2 where table1.カラム名=table2.カラム名; で、結合が出来ることは分かりました。 やりたいことはテーブルの結合と、ある期間のデータを持ってきたいのです。 select カラム名 from table1 where カラム名 between '20020213' and '20020218'; で期間を決めて引き出すやり方も分かっています。 一度に結合と期間を決めて引き出すやりかたってどうすればよいですか? それとも不可能ですか? 教えてください。

  • SQLのbetweenについて

    現在SQLを勉強しています。 C♯とSQLServerを使用しているのですが betweenを使って困った点があります。 自分で入力するAとB(どちらも数字)をbetweenの条件にしていしているのですが 例) select フィールド名 from テーブル where フィールド名 between A and B; → テーブルのフィールド名 の中のAからBのデータを選択する は問題ありません。 ですがAとBが未入力だとエラーが当然でてしまいます。 そこで未入力だとフィールド名の中を全件selectするようにしたいのですが、これはbetween で出来るのでしょうか? おそらくは条件であれこれ指定するのだと思いますが… 回答お願いします

  • SQL文

    名前、性別、年齢の載っているA表から19歳以下の女性、または26歳以上の女性の名前を抽出するSQL文はSELECT 名前 FROM 表A WHERE 性別=’女’AND 年齢<20 OR 性別=’女’AND 年齢>25 が正解ですが、性別=’女’を1回にして SELECT 名前 FROM 表A WHERE 性別=’女’AND 年齢<20 OR  年齢>25 ではだめでしょうか。教えてください。