我想创建一个动态标题,显示开始日期和结束日期之间有多少星期。我已经添加了周数和年份。现在我想要在这些星期和年份之间的DATENAME,我需要修复这个错误。针对枢轴查询的SQL Server 2008动态标题(每周)
这是我到目前为止已经完成:
DECLARE @Query AS VARCHAR(MAX)
DECLARE @Weeks INT
DECLARE @DayNum INT
DECLARE @tmp TABLE(WeekNum VARCHAR(MAX))
DECLARE @Headers VARCHAR(MAX)
DECLARE @DayNumbers INT = 1
DECLARE @FromDate DATETIME
DECLARE @ToDate DATETIME
SET @FromDate = '01/01/2016'
SET @ToDate = '03/01/2016'
SET @DayNum = 1
DECLARE @Years INT = YEAR(@FromDate)
DECLARE @DateRange INT = DATEDIFF(Week,@FromDate,'12/31/'+CAST(YEAR(@FromDate) AS VARCHAR))
SET @Weeks = DATEDIFF(Week, @FromDate, @ToDate)
WHILE 1 = 1
BEGIN
INSERT INTO @tmp(WeekNum)
VALUES ('Week ' + CAST(@DayNumbers AS VARCHAR(MAX)) + ' - ' + CAST(@Years AS VARCHAR))
IF @DayNum <= @Weeks
BEGIN
SET @DayNum = @DayNum + 1
SET @DayNumbers = @DayNumbers + 1
IF @DateRange = @DayNumbers
BEGIN
SET @Years = @Years + 1
SET @DateRange = DATEDIFF(WEEK,'01/01/' + CAST(@Years AS VARCHAR),'12/31/' + CAST(@Years AS VARCHAR))
SET @DayNumbers = 1
END
END
ELSE
BREAK
END
SELECT @Headers = ISNULL(@Headers + ',','') + QUOTENAME(t.WeekNum)
FROM @tmp t
SELECT *
FROm @tmp
这里是周的结果2016年1月1日和2016年3月1日
让我们尝试不同的日期2016年1月1日和Dec 31,2016
这是另一个问题。
它一路上升到2017年,即使它是唯一的,直到2016年12月
谢谢你的答案。有效!但我收到一个错误,递归只能处理100行。这种方法有没有其他选择?我正在考虑使用WHILE循环。 – ZeroCool
如何使此查询动态?因为我在@DateStart于2016年1月5日尝试并在第一行显示2016-01-05第2周 - 2016年。那应该是2016-01-03第1周 - 2016年,因为这是2016年1月5日这一天的第一天。 – ZeroCool
目前,我只是使用DatePart的WEEK,你想要提供的第一周开始日期? –