vbのDataTableのselectメソッドで日付検索方法

このQ&Aのポイント
  • vbのDataTableのselectメソッドを使用して、日付検索を行いたいです。
  • 具体的には、DataTableの属性を年月に変換し、特定の年月に該当するデータを抽出したいです。
  • 例えば、2015年01月のデータを抽出する場合、属性をYYYYMMDD文字列に変換して、like '201501%' の条件で抽出できます。
回答を見る
  • ベストアンサー

DataTableのselectメソッドで日付検索

vbのDataTableのselectメソッドで、年月に該当する日付検索をしたいです。 DataTable1.select(date1 = CDate('2015/01/01')) みたいな事ですが、 やりたいのは、2015年01月のものを全てという条件です。 date1の属性を年月に変換して、2015/01とイコールのものを抽出するか、 date1の属性をYYYYMMDD文字列に変換して、like '201501%' みたいな事をするのか。 postgresqlに例えると、 select * from tb1 where to_char(date1,'YYYYMMDD') like '201501%' みたいな事をVBのDataTableのselectメソッドでやりたいです。 よろしくお願いします。

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

  • ベストアンサー
  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

ANDと不等号で範囲を絞るのはどうでしょうか? DataTable1.select(date1 >= CDate('2015/01/01') AND date1 <= CDate('2015/01/31')) 参考URLには本日分のデータを取得するサンプルが掲載されています。

参考URL:
http://blog.livedoor.jp/akf0/archives/51016270.html

関連するQ&A

  • DataTableのselectメソッド

    C#を使用して、DataTableのselectメソッドで複数のフィールドに対して、特定の文字を含まないフィールドを抽出する事はできるでしょうか? ID 名前  住所   出身地 1 前田  東京都  大阪府 2 山田  石川県  三重県 3 藤川  東京都  東京都 4 大野  大阪府  石川県 上記のテーブルで、名前、住所、出身地に「川」が含まない1のレコードのみ抽出するようなイメージです。 よろしくお願いします。

  • 【ACCESS】クエリによる正規表現の基本的書き方

    いつもお世話になっております。 ACCESSのクエリで、下記8パターンにマッチする文字列を yyyyMMddの形で抽出する方法が判りません。 例でも構わないので、ご教示いただけないでしょうか。  (1)yyyyMMdd       (数字は半角)  (2)yyyy年M月dd日   (数字は半角)  (3)yyyy年MM月dd日 (数字は全角)  (4)yyyy年M月dd日   (数字は全角)  (5)yyyy年MM月dd日  (数字は半角)  (6)yyyy年M月dd (数字は半角)  (7)yyyy/MM/dd (数字は全角)  (8)yyyy/MM/dd      (数字は半角)   ※12月32日等の日付不正は対象外 数字の全・半角は区別しなくても抽出可能と考えています。 ただ、そもそも、正規表現の基本的な書き方が判らず。。 グループ化させるための括弧「()」や、論理和の「|」を使うと 抽出できませんでした。 accessでは利用不可なのでしょうか。。 一応、私の作成したクエリを掲載致します。 テーブルaからdate列を抽出します。上記8パターンにマッチする場合は、yyyyMMdd形式で、いずれにもマッチしなければ空白を返させたいと思います。 SELECT IIf (a.date Like '[1-9][0-9][0-9][0-9](0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])', a.date, IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '年', ''), '月', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"), '' ) ) ) ) ) ) ) ) FROM a 以上、何卒よろしくお願いいたします。

  • [VB.NET] DataSetをRDBのように使うには?

    VB.NET において、DataSetをRDBソフトのように使う方法を 探していました。 DataSet内の1つのDataTableにあるSelectメソッドを実行すると、 DataTable内の特定のレコードを抽出することができることは わかっています。 しかし、複数のDataTable間でリレーションを組んで、 Joinを実現したいのですが、どのようにしたら実現できるのでしょうか? かなり初歩的な内容かもしれませんが、 何卒、ご教授頂ければと思います。

  • VB5.0+SQL-Server7で日付を条件とした検索がうまくいかない。

    【やりたい事】  XXXTBLのDATE1が今日より前のレコードを読みたい。  SQL-ServerのDATE1属性は「datetime」です。 【やってみた事1】 Dim wk_Today As Date wk_Today = Date SQLText = " select *" & _      " From XXXTBL" & _      " Where DATE1 < " & "#" & wk_Today & "#" 【結果1】 実行時エラー 3146 ODBC呼び出しが失敗しました。 【やってみた事2】 Dim wk_Today As Date wk_Today = Date SQLText = " select *" & _      " From XXXTBL" & _      " Where DATE1 < " & wk_Today 【結果2】  該当データなし。  (条件に合致するレコードを作っておいたのに) 【やってみた事3】 SQLText = " select *" & _      " From XXXTBL" & _      " Where DateDiff('d',DATE1," & "#" & Date & "#" & ") > 0 " 【結果3】  読めました。 【質問】  なぜ、1と2は駄目だったのでしょうか?  1か2の方法でできた方が素直な感じがするのですが。  VBにもSQL-Serverにも精通しておらず、つたない 質問で申し訳ありませんが、不足する情報は補足しま すので、ご教授お願いいたします。

  • SheetsクラスのSelectメソッドが失敗

    Excelファイルのマクロで、SheetsクラスのSelectメソッドが失敗しましたのエラーが出ます 以下のマクロですが、最初のSheets(Array(................))._Select でエラーになりますその後は解りませんが...。 原因はSelectしているSheetの中に非表示なシートがあるのが原因ですが、 このマクロが入っているExcelファイルは色々な人が使うので人によって非表示にしたい シートがまちまちで、限定は出来ません。ただし、非表示にしたものはそのファイルを 使う人はそのシートはなくても構わないですので、使う人によってマクロを修正すれば 動くのですが、ちょっと面倒なのでこのマクロを修正して対応出来ればと思います。 このケースはsheet4~sheet10までのシートを選択して、選択した全てのシートの特定 部分を消去し、選択していないシートに入って選択を解除し基本となるシートに戻る というマクロです。 マクロの記録で作成して、いらなそうなやつを削除したものです。 ホームページで色々検索しましたが、非表示シートはSelect出来ないと言うことは何となく 解りましたが、マクロの記録で作成した事でも解るように全くの初心者ですので、そこの ところよろしくお願いします。 Sub クリアー() ' ' クリアー Macro ' Sheets(Array("sheet4", "sheet5", "sheet6", "sheet7", "sheet8", "sheet9", "sheet10")). _ Select Sheets("sheet6").Activate Union(Range( _ "F109:BO109,F112:BO112,F115:BO115,F118:BO118,F121:BO121" _ ), Range( _ "FJ225:GS225,FJ228:GS228,FJ231:GS231,FJ234:GS234,FJ237:GS237" _ ), Range( _ "OA535:PD535,OA538:PD538,OA541:PD541,OA544:PD544,OA547:PD547")).Select Selection.ClearContents Sheets("sheet3").Select Sheets("sheet6").Select Range("J1:L1").Select End Sub

  • yyyymmdd形式をDATE型の変数入れるには?

    yyyymmdd形式をDATE型の変数入れるには? お世話になります。現在VB.NETを勉強中です。 日付を扱いでDATE型の変数をFORMATを使い、 yyyymmdd形式にする事は出来るのですが、 逆にyyyymmdd形式をDATE型の変数に入れるにはどうすれば良いのでしょうか? 環境はVB2005です。

  • VB2010でのSQL日付フォーマット表記変更

    VB2010Expressを使用しています。 VBにてあるCSVファイルの内容をmdbファイルに移行するプログラムを作成しています DateTimePickerの日付を条件にしているんですがCSVの日付表記が『yyyymmdd』になっていて下記のコードでは『 (Me.Date日付.Text).ToString("yyyyMMdd")』の部分で『'String' から 'System.IFormatProvider' への変換時にランタイム エラーが発生する可能性があります。』とエラーが出ます。 自宅PCでは『(Me.Date日付.Text).ToString("yyyyMMdd")』を『DateAdd("d", 0, Me.Date健診日.Text).ToString("yyyyMMdd")』にしたらエラーなく動いたのですが、今日職場のPCで検証したら『型が合いません的なエラーが出てしまいます。(日付部分でのエラーみたいなのですが職場でのエラーをメモし忘れました、スイマセン) 日付のフォーマット変更そしてPCの違いによるエラーの発生原因についてご教授お願いします。 Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FolderPath & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName + " WHERE 日付 BETWEEN " + DateAdd("d", -1, Me.Date日付.Text).ToString("yyyyMMdd") + " AND " + (Me.Date日付.Text).ToString("yyyyMMdd") Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using '===============CSV-importへの登録=============== コード省略 Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try

  • C#で型変換

    DataTable T_DATATABLE = new DataTable(); DataRow[] T_DATATABLE_row; DataAdapter adp = new DataAdapter("SELECT id,Date FROM TABLE", CONN); adp.Fill(T_DATATABLE); //データテーブルにidとDateフィールドがあります。 //dtに下記で取得したダータを入れようと思っているのですが、 //System.Datetimeに変換することはできませんと表示されます。 DateTime dt = T_DATATABLE.Rows[0]["Date"]; どのようにすれば、型変換をすることができるでしょうか? string dt = (string)T_DATATABLE.Rows[0]["Date"]; string dt = (string)T_DATATABLE.Rows[0]["Date"].toString; としてもできません・・・ ご教授お願い致します!

  • to_date使用時に発生するエラーの対処方法について

    Oracle8iにおいて、日付1(date1)カラムは2007年6月5日12時25分20秒というようにvarchar2(14)で定義されており、時分秒でデータを持っています。 それを年月単位で件数をカウントしたいため、 to_dateで変換をかけているのですが(以下のSQL参照)、ORA-1830の エラーが発生してしまいます。 以下のSQLをどのように修正すれば正しく結果が得られるのでしょうか?ご教示下さい。 select to_date(date1,'YYYYMMDD'),count(*) from tableA where date1 >= '20070501000000' group by to_date(date1,'YYYYMMDD') ちなみに、to_dateのところを、to_charにしてみると、ORA-1481が発生してしまいます。

  • ポストバック時のDatasourceバインド処理について

    いつもお世話になっております。 VS2005 FrameWork2.0にて ASPポストバックのDatasourceの挙動について質問させて下さい。 使用コントロールはDatasourceプロパティを持っていればなんでもいいのですが、例えばデザイナで、 DropDownList.DatasourceIdに SqlDatasourceを指定し、 SqlDatasourceのSelectQueryに" Select * from Table1 " なんて指定しておけば、いくらポストバックが発生しても 常にDropDownList.DatasourceがNullでない状態で 、なおかつSQLサーバーをプロファイルしていても Select文の発行は初回の1回だけでした。 でも、 手動で DropDownList.DataSource = GetDataSource1() DropDownList.DataBind() ※GetDataSource1()は、データベースをOpenしてDataTableを返すメソッド みたいにコード上でバインドしておくと、 次のポストバック時にDataSourceがNULLになっています。 毎ポストバック時にDataBind()を書くと、 毎回Open~Select処理が走ってしまい嬉しくありません。 手動バインドさせる場合のスタンダードな書き方ってあるのでしょうか? こういったことがナンセンスで、 本来は [DataObjectMethod(DataObjectMethodType.Select)]属性をつけたメソッドを用意してObjectDatasourceのSelectメソッド等でやるのがスタンダードなんだよ といったご指摘もあれば全てお聞きしたいと思っております。 よろしくお願い致します。

専門家に質問してみよう