powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как найти интервал между датами?
4 сообщений из 4, страница 1 из 1
Как найти интервал между датами?
    #32013263
Osya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне понадобилось найти количество _целых_ месяцев прошедших между двумя датами. И все, трандец, не знаю че делать. MSSQL 6.5 и просто вычитать из одной даты другую нельзя. Есть функция DATEDIFF которая возвращает количество частей дат (допустим дней или месяцев) между двумя датами. Всегда думал, что эта функция и возвращает количество _целых_ дней, месяцев и т.д. А хрен!
declare @db datetime, @de datetime
SELECT @db='20010131', @de='20010201' /* 31 января 2001г и 1 февраля 2001г */
SELECT DATEDIFF(mm,@db,@de),@db,@de /* А терь мне надо, получить сколько месяцев прошло (подсказываю, ноль!
) */

результат выполнения:
----------- --------------------------- ---------------------------
1 2001-01-31 00:00:00.000 2001-02-01 00:00:00.000
(1 row(s) affected)

В MSSQL 7 этот код работает аналогично, но там есть возможность просто вычитать из одной даты другую.
...
Рейтинг: 0 / 0
Как найти интервал между датами?
    #32013265
Pandre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача не так проста как кажется с первого взгляда. Можно конечно ориентироваться на день месяца и вычитать 1 из результата если во второй дате день месяца меньше, чем в первой

SELECT
CASE
WHEN DATEPART(dd,@db)>DATEPART(dd,@de) THEN DATEDIFF(mm,@db,@de)-1
ELSE DATEDIFF(mm,@db,@de)
END,
@db,@de

Но что делать с последними днями месяца, например, 31 января 2001г и 28 февраля 2001г. Тут вроде бы должн получиться 1 целый месяц. Тогда надо вводить еще одну проверку на последний день месяца во второй дате и не вычитать 1.
...
Рейтинг: 0 / 0
Как найти интервал между датами?
    #32013266
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT datediff(mm, @db, @de) - CASE WHEN DATEADD(mm, datediff(mm, @db, @de), @db) > @de THEN 1 ELSE 0 END
...
Рейтинг: 0 / 0
Как найти интервал между датами?
    #32013269
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До этого хорошо бы проверять какая из дат больше, потому что мой пример исходит из того, что @db <= @de
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как найти интервал между датами?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]