我有一個DataTable,其DateTime列「DateCol」,可以是DBNull。 DataTable在其中有一行,在此列中有NULL值。DataTable.Select異常行爲在NULL DateTime上使用ISNULL運算符列
我正在試圖查詢在此列中具有DBNull值的行或大於今天日期的日期。今天的日期是2010年5月11日。我構建了一個查詢來選擇我想要的行,但它沒有按預期工作。查詢是:
string query = "ISNULL(DateCol, '" + DateTime.MaxValue + "'") > "' + DateTime.Today "'"
這將導致以下查詢:
"ISNULL(DateCol, '12/31/9999 11:59:59 PM') > '5/11/2010'"
當我運行此查詢,我沒有得到任何結果。我花了一段時間才弄明白爲什麼。以下是我在Visual Studio即時窗口調查:
> dt.Rows.Count 1 > dt.Rows[0]["DateCol"] {} > dt.Rows[0]["DateCol"] == DBNull.Value true > dt.Select("ISNULL(DateCol,'12/31/9999 11:59:59 PM') > '5/11/2010'").Length 0 <-- I expected 1
反覆試驗,結果顯示在下面的分界線上日期檢查的差異:
> dt.Select("ISNULL(DateCol, '12/31/9999 11:59:59 PM') > '2/1/2000'").Length 0 > dt.Select("ISNULL(DateCol, '12/31/9999 11:59:59 PM') > '1/31/2000'").Length 1 <-- this was the expected answer
的查詢工作正常,如果我把#換成日期時間字段而不是引號。
> dt.Select("ISNULL(DateCol, #12/31/9999#) > #5/11/2010#").Length 1
我的機器的區域設置當前設置爲EN-US,和短日期格式是M/d/yyyy的。
爲什麼原始查詢返回錯誤的結果?
如果將日期與2000年1月31日進行比較,而不是2000年1月1日進行比較,爲什麼它可以正常工作?
謝謝,這是有道理的。 – 2010-05-11 21:53:10