• 締切済み

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を使用しています。

  • Oracle
  • 回答数4
  • ありがとう数0

みんなの回答

回答No.4

その後の進展を知りたいので、追加です。 動きましたか? 別の問題がありそうなら、また、このスレッドに 追加をお願いしますね。

回答No.3

#2番さんこんちゃです。 実は私もA&B判定の人ですよ。質問がbetweenを使って解く問題と 判断しての回答だっただけです。 a<=n and n<b ですが、狂ったソースならこれもありかな。 n BETWEEN '2023/01/01' AND '2023/01/03' AND n>='2023/01/03'; 「以下」と「未満」の逆判定 01/03をBetweenで含みつつ捨てる。 23:59:59~00:00:00に距離があった場合以外、こうなる感じで。 だから結局、A&Bの方が、手っ取り早いって結論になりまして。

  • dell_OK
  • ベストアンサー率13% (740/5643)
回答No.2

私はBETWEENをあまり使わないのでそのような場合は、 このような書き方をしています。  登録日>=パラメータ1 AND 登録日<パラメータ2の翌日 パラメータ1以上、パラメータ2の翌日未満です。  登録日>='2023/01/01' AND 登録日<'2023/01/03' 時刻は記述しませんが、00:00:00として扱われていると思います。 それか回答No.1さまが書かれているような方法です。 BETWEEN '2023/01/01 00:00:00' AND '2023/01/02 23:59:59'

回答No.1

>原因は、データベースに入っているのは、Date型で、YYYY/MM/DD HH:mm:SS形式でした。 datatime型の間違いな気がするが。 なら、検索も同じくdatetimeにすればいいだけと思われます。 BETWEEN '2023/01/01 00:00:00' AND '2023/01/02 23:59:59' あと、元々 2023/1/2 23:59:59こう書かれてましたが、 フォーマット的に先頭に0をつけたもので統一してます。 あと、datetime -> dateにキャストした場合に、時刻は0なので '2023/01/01 00:00:00' ここは、'2023/01/01' でも、かまわない。 実際に実行した結果を付けましたが、 元の値は、 2023-01-01 10:01:47 2023-01-01 23:59:59 2023-01-02 00:00:00 2023-01-02 23:59:59 2023-01-03 10:04:00 #2023/01/02 があるので、ここはヒットしない。 を検索したものです。 ってこと???

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

  • 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が失敗してデータを取り出すことができませんでした。 正しくデータを取り出すためには、どのように記述すれば良いでしょうか?

  • VB SQL文について

    VB6.0(SP5) XP SQL Sever7.0を使用しています。 テーブルからSQLより以下の条件で抽出しようとしています がいいSQL文が浮かびません。 TableA ----------------------- | sDate | nNumber | ----------------------- | 20030301 | 200 | | 20030301 | 250 | | 20030302 | 220 | | 20030302 | 225 | | 20030303 | 230 | ----------------------- 上記の内容で、一度読み込んで、内部テーブルに格納 したとします。TableAにデータ6、7が追加後に再度、 TableAを読んだときにデータ6、7だけ抽出したいのです が、いい方法ありますか? TableA ----------------------- | sDate | nNumber | ----------------------- | 20030301 | 200 | 1 | 20030301 | 250 | 2 | 20030302 | 220 | 3 | 20030302 | 225 | 4 | 20030303 | 230 | 5 | 20030303 | 240 | 6  ← 抽出したいデータ | 20030304 | 100 | 7  ← 抽出したいデータ ----------------------- ルール sDate :重複することあるが昇順になっている。 nNumber:sDateをキーにすると重複しない。 sDate+nNumberでみると昇順になっている。 よろしくお願いします。

  • SQL文について

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

  • VBを使ってる初心者です【SQL】【Access】

    VisualStudio2008で、Access2010のデータベースからデータ抽出を行えるアプリを作っています。 このときSQL文を用いてAccessからデータ抽出を行うんですかね? そもそもVisualStudio、SQL、Accessそれぞれがどのように関係しているのかわかりません。 いくつかサイトを見て回ったのですが・・・ 教えてほしいこと 1. データ抽出アプリを作るにあたってVisualStudio、SQL、Accessの各々がどのような役割を果たすか 2. Accessのデータベースの形式は空or Webどちらが有効なのか 3. VisualStudioでデータの抽出を行う方法 長くなりましたがよろしくお願いします。 開発言語はVBで、私自身は簡単なプログラムであれば理解できるレベルです

  • sql文のwhere句について

    <環境>sqlserver SQLでパラメータが空白であれば全件取得、パラメータに値が設定されている場合には 条件にHITするデータを抽出したいのですが、一本のクエリで抽出することができるのでしょうか? 空白時パラメータは以下のとおり入ってきます。 @no="" …完全一致 @name="%%" …部分一致 例) SELECT * FROM テーブル WHERE (NO = @no) and ((@name IS NULL) OR (@name IS NOT NULL) AND (NAME LIKE @name)) NAMEは上記クエリにて取得できています。 NOのところはどのようにすればよいでしょうか?

  • SQLについて

    SQLについて質問です。 現在vbからmdbファイルにある日付間のデータを取得するようなsqlをなげているのですがうまくいかないのでお知恵をお貸しください、、、 sql文は ("select * from ABC where date between ""'" & hiniti & "'"" and ""'" & hiniti2 & "'"" ;") hinitiには日付(2006/4/5)hiniti2には(2006/7/4)のように日付が入ったとするとデータは2006/4/5以降から2006/7/4までしか取得してこないのです。 BETWEEN 演算子は境界値も含むらしいので2006/4/5のデータが取れない理由がわかりません。 日付が文字列というのが問題あるのでしょうか?

  • SQL文について

    SQL文について 現在一度に検索ができずに困っているため質問します。 データベースに男性テーブルと女性テーブルがあります。 男性テーブル ・番号 ・名前 女性テーブル ・番号 ・名前 このテーブルより自分の父、母、母の父を表示させたいのですが SELECT 男性テーブル.名前, 女性テーブル.名前, (※母の父を表示させたい) FROM 男性テーブル, 女性テーブル WHERE 男性テーブル.番号=父の番号 AND 女性テーブル.番号=母の番号 このあと条件に (AND 男性テーブル.番号=母の父の番号) をつけることはできないためSQL文の書き方で困っています。 抽出データは複数なので※の部分にサブクエリを書くことができません。 何かよいSQLの書き方はありますでしょうか?

  • VBとSQLで、、、、

    私は最近ソフトウェアの開発に携わることになりました。 私自身プログラミングの経験は全くありません。 何を命じられたのかといいますと、VBとSQLをつかって、サーバー上の  データベースにクライアントからアクセスして、ほしいデータだけをもってくる  業務を支援するようなソフトを作るのです。 例えば、ユーザーが日付の範囲だけをいれると、その間に店を訪れた人のすんでい  る地域別、さらにそのお客の年代別で何人いるのかというようなものが  ボタンひとつでだせるようなものなんです。 まったく知識がなくてとりあえずVBの基本とSQLコマンドの本を片手に  やっています。(あと、アクセスでおおよそのデータベースについて学びまし  た) で、結局何がいいたいのかと申しますと、VBとSQLを利用したデータベースの  構築に関する良い文献を紹介していただきたいのです。 VBは初心者なのでとりあえず、それようのものを。 あと、ストアドというものを駆使するらしいので、それについての詳しい本を  紹介してください。サイトなんかでもよいです。 それでは、よろしくお願い致します。  (多分、質問の内容もわけのわからないことを言ってるかもしれません^^;)

  • ユニオンクエリで期間指定抽出のSQL記述について

    いつもお世話になっております。 Access 2007で、「人名集計」テーブルと「資料送付」テーブルがあり、それぞれ、同一のフィールド名でテーブルが作成されております。 これを「発送日」フィールドの昇順で並べ替えながら結合するユニオンクエリを作成しました。 SELECT * FROM 人名集計 UNION ALL SELECT * FROM 資料送付 ORDER BY 発送日; とりあえず、上記のSQLでは動いていますが、このSQLに、 「発送日」の期間を指定して、抽出条件(パラメータ)を加えようとしていますが、うまくいきません。 WHERE句を使って、Between 「最初の日付を入力」 And 「最後の日付を入力」 のような文を SQLの何処にどのように記述すればよいのか、教えてください。 宜しくお願い申し上げます。