您可以将变量传递到DATEDIFF的间隔中吗

时间:2019-10-03 13:45:41

标签: sql sql-server ssms datediff

我有一个已经知道答案的感觉,但是您可以执行以下操作(最基本的示例)

DECLARE @interval varchar(2) = 'yy'

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

我将单位(yy,mm或dd)放在一列中,并希望根据间隔通过其他列之一动态运行DATEDIFF。

2 个答案:

答案 0 :(得分:3)

不能。您需要使用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,但这对于这种类型的计算通常不必要地复杂。

答案 1 :(得分:0)

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'

请确保在“ Day”(日期)中没有像“ mm”(月份)这样的关键字“ dd” 参考https://www.w3schools.com/sql/func_sqlserver_datediff.asp