- 締切済み
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を使用しています。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- AsarKingChang
- ベストアンサー率46% (3467/7474)
その後の進展を知りたいので、追加です。 動きましたか? 別の問題がありそうなら、また、このスレッドに 追加をお願いしますね。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
#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% (766/5720)
私は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'
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>原因は、データベースに入っているのは、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 があるので、ここはヒットしない。 を検索したものです。 ってこと???