Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка в DATEDIFF или я что-то не так понимаю?  [new]
Гришков Максим
Member

Откуда: СПб
Сообщений: 324
Добрый вечер.
Наткнулся вот на такую странность - задаю 2 даты с разницей "почти" 2 года. Как я всю жизнь думал, "почти 2 года" никак не равно 2 года, но вот MS SQL кажется думает иначе. Ниже простенький пример:
declare @p_date1 datetime,
	@p_date2 datetime;

set @p_date1 = '2009/05/13 15:46:05';
set @p_date2 = '2011/05/03 01:34:46';

select datediff(year, @p_date1, @p_date2)

И вот результат:
-----------
2

(1 row(s) affected)

Может я ошибаюсь, но разница должна быть равна 1 году, т.к. до полноценных 2 лет, мы недотягиваем 10+ дней.
Может кто-нибудь пояснить, в чем я ошибаюсь или почему MS SQL так работает?
16 дек 11, 20:34    [11780411]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в DATEDIFF или я что-то не так понимаю?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Гришков Максим
Может я ошибаюсь, но разница должна быть равна 1 году, т.к. до полноценных 2 лет,

Разница между годами не есть тоже самое, что разница в годах
Тем более, что размер года - величина переменная
16 дек 11, 20:39    [11780430]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в DATEDIFF или я что-то не так понимаю?  [new]
Гришков Максим
Member

Откуда: СПб
Сообщений: 324
Glory
Разница между годами не есть тоже самое, что разница в годах

Тогда я не понимаю, почему в случае с днями он возвращает именно разницу в днях, а не разницу между днями???
declare @p_date1 datetime,
	@p_date2 datetime;

set @p_date1 = '2011/05/13 15:46:05';
set @p_date2 = '2011/06/03 01:34:46';

select datediff(day, @p_date1, @p_date2)

-----------
21

(1 row(s) affected)
16 дек 11, 20:51    [11780480]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в DATEDIFF или я что-то не так понимаю?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Гришков Максим
Тогда я не понимаю, почему в случае с днями он возвращает именно разницу в днях, а не разницу между днями???

Потому что это именно разница между днями, а не количество полных дней
declare @p_date1 datetime,
	@p_date2 datetime;

set @p_date1 = '2011/06/02 23:59:59';
set @p_date2 = '2011/06/03 00:00:00';

select datediff(day, @p_date1, @p_date2)
16 дек 11, 20:55    [11780493]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в DATEDIFF или я что-то не так понимаю?  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Потому что
DATEDIFF (Transact-SQL)
Возвращает количество пересеченных границ (целое число со знаком), указанных аргументом datepart, за период времени, указанный аргументами startdate и enddate.
16 дек 11, 21:44    [11780644]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить