我猜这是不可能的,因为引擎不喜欢它,但是有没有办法(动态SQL除外)将DATEPART作为参数传递给过程?
发布于 2010-10-15 23:54:36
一种选择是使用带有参数的CASE (最好使用int枚举而不是string):
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发布于 2010-10-15 23:52:40
不是的。没有"year“数据类型。您可以这样做:
CREATE PROC myproc @Year int, @Month tinyint此操作失败,因为DATEPART部分是文本
DECLARE @part varchar(10)
SET @part = 'month'
SELECT DATEPART(@part, GETDATE());或者这个和一个IF
CREATE PROC myproc @WhoeDate datetime, @part varchar(10) /* year. month etc*/发布于 2010-10-15 23:43:06
为什么不能直接传入从Datepart创建的日期呢?
DECLARE @datepart DATETIME
SET @datepart = DATEPART(yyyy, GetDate())
exec spName @dateparthttps://stackoverflow.com/questions/3943775
复制相似问题