NHibernate генерирует следующий SQL, который не поддерживается Firebird;
where (struct_cas0_.DELETED IS NULL)
and struct_cas0_.ACCOUNT_ID = 372 /* @p0 */
and struct_cas0_.DATE_RECORD <= '2005-01-01T00:00:00.00' /* @p1 */
and struct_cas0_.DATE_RECORD >= '2006-12-31T00:00:00.00' /* @p2 */
Приведенный выше SQL завершается ошибкой в Firebird с ошибкой «При преобразовании типов данных произошло переполнение. Ошибка преобразования из строки '2005-01-01T00: 00: 00.00'"
Если мы удалим 'T' из запроса, Firebird выполнит запрос без проблем;
where (struct_cas0_.DELETED IS NULL)
and struct_cas0_.ACCOUNT_ID = 372 /* @p0 */
and struct_cas0_.DATE_RECORD <= '2005-01-01 00:00:00.00' /* @p1 */
and struct_cas0_.DATE_RECORD >= '2006-12-31 00:00:00.00' /* @p2 */
Есть ли способ, которым мы можем заставить NHibernate удалить 'T' при преобразовании DateTime в запрашиваемую строку?
Дополнительный вопрос теперь поднимается после некоторого исследования. Похоже, что FireBird не поддерживает комбинированный формат даты и времени. Формат DateTime (ISO8601) http://en.wikipedia.org/wiki/ISO_8601 с символом разграничения времени («T»). Можно ли это подтвердить, так как я не понимаю, почему база данных не поддерживает такой стандартный (сортируемый) формат даты?
Если буква «Т» пропущена, дата поддерживается.