как получить число на месяцах между двумя датами в SQL-сервере 2005

У меня есть столбец в моей таблице SQL-сервера 2005 года, которая должна содержать число месяцев, сотрудник работал.

Так как у меня также есть дата, сотрудник был занят, я хочу, чтобы "months_In_Service" столбец был вычисляемым столбцом.

Теперь, если я использую DATEDIFF(month,[DateEngaged],GETDATE()) как формула в течение месяцев в обслуживании вычисляемый столбец, результаты корректны несколько раз и другие неправильные времена.

Каков был бы лучший надежный способ получить число месяцев между значением DateEngaged и текущей датой? Какую формулу я должен использовать в своем вычисляемом столбце?

5
задан toscanelli 23 August 2017 в 10:14
поделиться

4 ответа

Что-то вроде (возможно, понадобится поменять в обмен 1 и 0, непроверенным)

datediff(month,[DateEngaged],getdate()) +
 CASE WHEN DATEPART(day, [DateEngaged]) < DATEPART(day, getdate()) THEN 1 ELSE 0 END

границы месяца измерения Datesiff, например, 00:00 на 1-й в каждом месяце, а не в день месяцы годовщины

Редактировать: после просмотра OP Комментарий, вы должны вычесть 1, если день начала> конечный день

DATEDIFF (month, DateEngaged, getdate()) -
 CASE
   WHEN DATEPART(day, DateEngaged) > DATEPART(day, getdate()) THEN 1 ELSE 0
 END

, так что в течение 20 декабря до 13 января, Dateiff дает 1, а затем 20> 13, так что вычитает 1 = ноль месяцев.

12
ответ дан 18 December 2019 в 11:57
поделиться
- 4648635-

Может быть, вы хотите что-то вроде:

(year(getdate())-year([DateEngaged]))*12+(month(getdate())-month([DateEngaged]))
1
ответ дан 18 December 2019 в 11:57
поделиться

Если Вы предполагаете, что месяц означает 30 дней, Вы можете также округлить долину

round((datediff(day,[DateEngaged],getdate()))/30.00,0)
-2
ответ дан 18 December 2019 в 11:57
поделиться

Тот же подход, что и gbn, но с меньшим количеством нажатий клавиш :-)

SELECT 
    DATEDIFF(MONTH, DateEngaged, GETDATE()) +
    CASE 
        WHEN DAY(DateEngaged) < DAY(GETDATE())
        THEN 1 
        ELSE 0 
    END
4
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: