SELECT DATEDIFF(DAY, '2012-01-01 01:23:45', '2012-01-02 01:23:45')
Учитывая этот пример, оно все равно должно быть 1
, потому что прошел только один день.Даже если вы рассматриваете начало дня, оно все равно будет только одним (так как этот диапазон включает начало только 2012-01-02 00:00:00
).
Ваша логика для:
SELECT DATEDIFF(DAY, '2012-01-01 01:23:45', '2012-01-02 01:23:45')
и
SELECT DATEDIFF(DAY, '2012-01-01 00:00:00', '2012-01-02 00:00:00')
Должны быть одинаковыми, поскольку математически они имеют одинаковый диапазон.DATEDIFF
сравнивает на основе гранулярности первого параметра.Вы сравниваете по day
, поэтому SQL Server будет видеть 2012-01-01
до 2012-01-02
как 1
разницу в днях.
Чрезвычайно уродливый (и, на мой взгляд, плохой) обходной путь будет выглядеть примерноthis:
SELECT DATEDIFF(day, yourStartDate, dateadd(ss, -1, yourEndDate)) + 1
То, что это будет делать, это обрабатывать инклюзивные даты.Таким образом, вы могли бы в основном иметь это:
SELECT DATEDIFF(DAY, '2012-01-01 01:23:45', dateadd(ss, -1, '2012-01-02 01:23:45')) + 1
будет равно 2
и это:
SELECT DATEDIFF(DAY, '2012-01-01 00:00:00', dateadd(ss, -1, '2012-01-02 00:00:00')) + 1
будет равно 1
.Я не думаю, что это лучшая идея в мире, но она даст вам желаемый результат.Все сводится к бизнес-логике.