Datepart() 有没有办法为日期部分间隔使用变量
Datepart() is there any way to use a variable for the datepart interval
我正在创建一个 SQL 服务器存储过程,它根据当前的一周进行大量过滤。我没有传递开始日期和结束日期,而是传递了一个日期并使用 Datepart() 过滤出星期。
Where DATEPART(WEEK, cd.TurninDate) = DATEPART(WEEK, @StartDate)
and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
尽量积极主动,我可以看到经理要求这是 运行 每月或每季度以及每周。如果可以的话,我宁愿不为每个版本都存储 Proc。我想传入频率和日期,但似乎不起作用。
我试过:
Where DATEPART(@Freq, cd.TurninDate) = DATEPART(@Freq, @StartDate)
and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
但我在 @Freq 上收到错误消息,未被识别为间隔。
有谁知道我可以解决这个问题的方法吗?
无法使用变量,但您可以解决它:
case
when @part = 'YEAR' THEN DATEPART(YEAR, cd.TurninDate)
when @part = 'WEEK' THEN DATEPART(WEEK, cd.TurninDate)
...
END
如您所见,SQL/T-SQL 语言的设计欠缺。
MSDN的资料很清楚
datepart
Is the part of date (a date or time value) for which an integer will be returned. The following table lists all valid datepart arguments. User-defined variable equivalents are not valid
https://msdn.microsoft.com/en-us/library/ms174420.aspx
但要解决这个问题,您可以创建动态 SQL 并用变量填充该部分。
select datepart(year,GETDATE())
declare @DateType varchar(max);
set @DateType = 'YEAR';
declare @datemanip varchar(max);
set @datemanip = 'select datepart(' + @DateType + ',GETDATE())';
execute( @datemanip );
这两个语句将产生相同的结果。然后你可以把它放在你的存储过程中并传入@DateType 作为参数。
我正在创建一个 SQL 服务器存储过程,它根据当前的一周进行大量过滤。我没有传递开始日期和结束日期,而是传递了一个日期并使用 Datepart() 过滤出星期。
Where DATEPART(WEEK, cd.TurninDate) = DATEPART(WEEK, @StartDate)
and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
尽量积极主动,我可以看到经理要求这是 运行 每月或每季度以及每周。如果可以的话,我宁愿不为每个版本都存储 Proc。我想传入频率和日期,但似乎不起作用。
我试过:
Where DATEPART(@Freq, cd.TurninDate) = DATEPART(@Freq, @StartDate)
and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
但我在 @Freq 上收到错误消息,未被识别为间隔。
有谁知道我可以解决这个问题的方法吗?
无法使用变量,但您可以解决它:
case
when @part = 'YEAR' THEN DATEPART(YEAR, cd.TurninDate)
when @part = 'WEEK' THEN DATEPART(WEEK, cd.TurninDate)
...
END
如您所见,SQL/T-SQL 语言的设计欠缺。
MSDN的资料很清楚
datepart Is the part of date (a date or time value) for which an integer will be returned. The following table lists all valid datepart arguments. User-defined variable equivalents are not valid
https://msdn.microsoft.com/en-us/library/ms174420.aspx
但要解决这个问题,您可以创建动态 SQL 并用变量填充该部分。
select datepart(year,GETDATE())
declare @DateType varchar(max);
set @DateType = 'YEAR';
declare @datemanip varchar(max);
set @datemanip = 'select datepart(' + @DateType + ',GETDATE())';
execute( @datemanip );
这两个语句将产生相同的结果。然后你可以把它放在你的存储过程中并传入@DateType 作为参数。