【发布时间】:2013-07-17 20:54:06
【问题描述】:
我刚刚找到了spt_values 表,我发现它非常有用,现在我想根据输入参数@Month 列出几周或几个月。
DECLARE @start_date [date] = CAST('2013-08-01' as [date])
DECLARE @end_date [date] = CAST('2013-10-01' as [date])
DECLARE @Month [bit] = 0
SELECT
case @Month when 0 then
DATEPART(week,DATEADD(WEEK, [v].[number], @start_date))
else DATEPART(MONTH,DATEADD(MONTH, [v].[number], @start_date)) end
as 'Timespan'
FROM [master].[dbo].[spt_values] [v]
WHERE
DATEADD(WEEK, [v].[number], @start_date) <= @end_date AND
[v].[type] = 'P'
因此,如果我现在传入 @Month = 1,我希望有一个这样的 where 子句来列出月份而不是几周。
WHERE
CASE @Month WHEN 1 THEN
DATEADD(MONTH, [v].[number], @start_date) <= @end_date) when 0 then
DATEADD(WEEK, [v].[number], @start_date) <= @end_date) AND
[v].[type] = 'P'
但不幸的是,这不起作用。
但是,我可以在Select 语句上方添加一个If 语句,但它会在Where 子句中处理它。有什么想法吗?
【问题讨论】:
标签: sql-server tsql if-statement case where