Datepart()是否有任何方法可以将变量用于datepart间隔

Spo*_*ght 1 t-sql sql-server datepart

我正在创建一个基于当前周进行大量过滤的SQL Server存储过程.我传递的是一个日期并使用Datepart()过滤掉一周,而不是传递一个开始和结束日期.

    Where DATEPART(WEEK, cd.TurninDate) = DATEPART(WEEK, @StartDate)
      and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
Run Code Online (Sandbox Code Playgroud)

尝试顶级主动,我可以看到经理要求每月或每季度以及每周运行.如果我能帮助它,我宁愿没有为每个版本存储过程.我想传递频率和日期,但它似乎不起作用.

我试过了:

    Where DATEPART(@Freq, cd.TurninDate) = DATEPART(@Freq, @StartDate)
      and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
Run Code Online (Sandbox Code Playgroud)

但我得到@Freq错误未被识别为间隔.

有谁知道我能解决这个问题的方法吗?

usr*_*usr 8

没有办法使用变量,但你可以解决它:

case
 when @part = 'YEAR' THEN DATEPART(YEAR, cd.TurninDate)
 when @part = 'WEEK' THEN DATEPART(WEEK, cd.TurninDate)
 ...
 END
Run Code Online (Sandbox Code Playgroud)

您可以看到SQL/T-SQL语言的设计缺乏.