DataTable.Select() で日付型の比較

.NET (C#, VB.NET) の DataTable.Select() で、日付型の比較を行うには以下のようにします。

DataTable table = ...GetData();
// ...
DataRow[] rows = table.Select(string.Format(
	"[{0}] = #{1}#",
	"DATE_COLUMN_NAME", DateTime.Today));

上記のように、「#」で囲むことで日付型として扱うことができます。 Visual Basic 派の人にはおなじみの日付リテラル (#) ですが、 C#*1 の人は余りなじみがないと思いますので、要チェックです。

日付の比較には、等号や不等号が使用できます。 DataTable.Select() で BETWEEN はサポートされていませんので、以下のように記述するなど工夫してください。

// 今日から明日までの範囲で取得
DataRow[] rows = table.Select(string.Format(
	"#{1}# <= [{0}] AND [{0}] <= #{2}#",
	"DATE_COLUMN_NAME", DateTime.Today, DateTime.Today.AddDays(1)));

// BETWEEN は使用不可
// DataRow[] rows = table.Select(string.Format(
//     "BETWEEN [{0}] #{1}# AND #{2}#",
//     "DATE_COLUMN_NAME", DateTime.Today, DateTime.Today.AddDays(1)));

*1:ちなみに、 C# 派です。備忘録もかねて、この Tips を書いています :-)