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

Откуда:
Сообщений: 1066
set dateformat dmy
select datediff(m, '29.10.2010', getdate())

результат 12, но почему????, только завтра будет разница в полных 12 месяцев
28 окт 11, 16:53    [11517631]     Ответить | Цитировать Сообщить модератору
 Re: траблы с datediff  [new]
Glory
Member

Откуда:
Сообщений: 104751
marvel
только завтра будет разница в полных 12 месяцев

А где написано, что функция вычисляет полные года/месяца/дни ?
28 окт 11, 16:54    [11517641]     Ответить | Цитировать Сообщить модератору
 Re: траблы с datediff  [new]
iljy
Member

Откуда:
Сообщений: 8711
marvel,

все еще ужастнее
select DATEDIFF(m,'20110228 23:59:59.997', '20110301')
28 окт 11, 16:56    [11517667]     Ответить | Цитировать Сообщить модератору
 Re: траблы с datediff  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
marvel,

-- Количество полных лет (c) iap
DECLARE @D1 DATE = '20080229' -- Високосный год
DECLARE @D2 DATE = '20090301'
SELECT DATEDIFF(YEAR,@D1,@D2)-CASE WHEN 100*MONTH(@D1)+DAY(@D1)>100*MONTH(@D2)+DAY(@D2) THEN 1 ELSE 0 END;



-- Разложить на дни, часы, минуты, секунды
declare @t1 datetime, @t2 datetime

set @t1 = '20101029 19:24:15'
set @t2 = '20111028 11:27:14'


-- Вариант 1
select datediff(dd, '19000101', diff) [Дни], datepart(hh, diff) [Часы], datepart(mi, diff) [Минуты], datepart(ss, diff) [Секунды] from
(select @t2 - @t1 [diff]) t

-- Вариант 2
select diff/86400 [Дни], diff/3600%24 [Часы], diff%3600/60 [Минуты], diff%60 [Секунды] from
(select datediff(ss, @t1, @t2) [diff]) t  -- Функция DATEDIFF, для секунд максимально число равно 68 годам.

31 окт 11, 11:40    [11525150]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить