DataTable.Select メソッドに日付型の指定ってどうやるの? では、いろいろと日付型の使い方について教えてもらいました。教えてくださったみなさんありがとうございます。
おかげさまで日付型を DataTable.Select メソッドで使えるようになりました。どうもシャープ記号で囲む事に惑わされていたようです。ドキュメントには「日付値はシャープ記号 (#) で囲む必要があります。」としか記載されていません。実はこのとおりシャープ記号で囲むだけでよかったのです。変に囲んだ時の年月日の順番とかを気にしてしまって、「yyyy/MM/dd」でいいのか「M/d/yyyy」でないといけないのか、と考えていました。
DataTable.Select(String.Format("DateColumn = #{0}#", DateTime.Today))
DataTable.Select(String.Format( _
"DateColumn >= #{0}# AND DateColumn < #{1}#", DateTime.Today, DateTime.Today.AddDays(1)))
これで完璧! と思っていたら、実はドキュメントの内容が日本語版だとちょっと古いようです。英語のサイトや「MSDN ライブラリ 2007 年 6 月版」では次のように記載されています。
日付の値は、データ プロバイダに応じて、シャープ記号 (#) または一重引用符 (') で囲む必要があります。
データ プロバイダ毎に囲む文字も変わってくるのですね。でも DataTable がデータ プロバイダとどういう関係を持っているのは不明ですが、とりあえずプロバイダ毎の囲む文字を表にしてみました。
プロバイダ |
囲む文字 |
SqlClient |
一重引用符 (') |
OracleClient |
シャープ記号 (#) |
OleDb |
シャープ記号 (#) |
Odbc |
シャープ記号 (#) |
これでなんとか日付型について、納得のいく処理がかけそうです。教えてくださったみなさん、本当にありがとうございます。