DATEPART作为参数

Bra*_*rad 13 sql t-sql sql-server stored-procedures sql-server-2008

我猜这是不可能的,因为引擎不喜欢它,但有没有办法(禁止动态SQL)DATEPART作为参数传递给一个过程?

小智 12

一种选择是使用带参数的CASE(最好使用int枚举而不是字符串):

declare @part varchar(10)
set @part = 'YEAR'
select case @part 
            when 'YEAR' then datepart(yy, SomeDateTimeColumn) 
            when 'MONTH' then datepart(mm, SomeDateTimeColumn) 
            else datepart(dd, SomeDateTimeColumn) 
        end
from SomeTable
Run Code Online (Sandbox Code Playgroud)