Можете ли вы передать переменную в интервал DATEDIFF - PullRequest
0 голосов
/ 03 октября 2019

У меня такое чувство, что я уже знаю ответ, но можете ли вы сделать следующее (самый простой пример)

DECLARE @interval varchar(2) = 'yy'

SELECT DATEDIFF(@interval, myDate, GETDATE())

Я держу единицу (гг, мм или дд) в столбце и хочудинамически запускать DATEDIFF на основе одного из других столбцов, проходя через интервал.

Ответы [ 2 ]

3 голосов
/ 03 октября 2019

Вы не можете. Вам нужно использовать выражение case:

select (case @interval
            when 'year' then datediff(year, mydate, getdate())
            when 'month' then datediff(month, mydate, getdate())
            when 'day' then datediff(day, mydate, getdate())
        end)

Я должен сказать. Вы могли бы использовать динамический SQL, но это обычно неоправданно сложно для этого типа вычислений.

0 голосов
/ 03 октября 2019
select case @interval
            when 'yy' then datediff(year, mydate, getdate()) end as 'YEAR'
 case @interval
            when 'mm' then datediff(month, mydate, getdate()) end as 'MONTH'
 case @interval
            when 'dy' then datediff(day, mydate, getdate())end as 'DAY'

Убедитесь, что для Дня нет ключевого слова как "dd", как для месяца "мм". Ссылка https://www.w3schools.com/sql/func_sqlserver_datediff.asp

...