У меня есть DataTable с столбцом DateTime, DateCol, который может быть DBNull. В DataTable имеется одна строка с нулевым значением в этом столбце.DataTable.Select Вещает странно, используя ISNULL-оператор в NULL DateTime Column
Я пытаюсь запросить строки, которые имеют значение DBNull в этом столбце или дату, которая больше, чем сегодняшняя дата. Сегодняшняя дата - 5/11/2010. Я построил запрос для выбора строк, которые я хочу, но он не работал должным образом. Запрос был:
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
запрос работает нормально, если я упакую поле DateTime в # вместо кавычек.
> dt.Select("ISNULL(DateCol, #12/31/9999#) > #5/11/2010#").Length 1
региональные настройки моей машины в настоящее время устанавливается на EN-US, и краткий формат даты является M/d/гггг.
Почему исходный запрос возвратил неправильные результаты?
Зачем это работать, если дата была сопоставлена с 31.01.2000, но не против 2/1/2000?
спасибо, что имеет смысл. –