选择本周加上7周前进?

时间:2018-04-09 11:59:33

标签: sql-server while-loop insert datepart

我有一个看起来像这样的表:

enter image description here

SELECT
      [Year],
      [Week]
FROM [BI_Planning].[dbo].[tblWeekCalendar]

我手动设置了2018年1周15日的记录。

我想有一个选择,让我本周(15)+ 7周前进 像这样的东西:

enter image description here

然而,当第16周到来时,我应该有16 + 7周,这意味着2018年的新行 - 23

今年也必须参加比赛,因为今年年底我想有2019-1等等。

要使用select datepart(iso_week,getdate())

获取本周即可

这可能吗?

3 个答案:

答案 0 :(得分:1)

而不是手动插入或添加7来计算周数,您应该使用默认的SQL函数DATEPART来获取正确的周数。

您可以在以下日期范围内生成周数。

DECLARE @StartDate DATETIME = '2018-01-01'
DECLARE @EndDate DATETIME = '2019-12-31' 

SELECT DISTINCT  DATEPART( wk, T1.DATE) AS [Week],Year(T1.DATE)
FROM   (
         SELECT
         @StartDate + RN AS DATE 
        FROM   (SELECT ROW_NUMBER() 
                         OVER ( 
                           ORDER BY (SELECT NULL)) RN 
                FROM   master..[spt_values]) T) T1 
WHERE  T1.DATE <= @EndDate 
ORDER BY Year(T1.DATE)

如果您还想要WeekStart和WeekEnd,您可以尝试以下内容。

DECLARE @StartDate DATETIME = '2018-01-01'
DECLARE @EndDate DATETIME = '2019-12-31' 

SELECT MIN(T1.DATE) WeekStart, MAX(T1.DATE) WeekEnd, [Week], [Year]
FROM
(
    SELECT  DATEPART( wk, T1.DATE) AS [Week],Year(T1.DATE) AS [Year], T1.DATE
    FROM   (
            SELECT
            @StartDate + RN AS DATE 
        FROM   (SELECT ROW_NUMBER() 
                            OVER ( 
                            ORDER BY (SELECT NULL)) RN 
                FROM   master..[spt_values]) T) T1 
    WHERE  T1.DATE <= @EndDate 

) T1
GROUP BY [Week], [Year]
ORDER BY [Year],[Week]

答案 1 :(得分:0)

尝试以下方法

DECLARE @Weekstart int = DATEPART(WW, '2018-01-01')
DECLARE @WeekEnd int = DATEPART(WW, '2018-12-31')

CREATE TABLE #Temp
(
Year int,
WeekNo int
)
INSERT INTO #Temp (Year, WeekNo) VALUES (DATEPART(YYYY, GETDATE()),1)

DECLARE @Count INT
DECLARE @TotalCount INT
SET @TotalCount = DATEPART(WW, '2018-12-31')
SET @Count = 1

WHILE (@Count < @TotalCount)
BEGIN
    DECLARE @WeekNo INT
    SELECT @WeekNo = MAX(ISNULL(WeekNo, 0))+1 FROM #Temp
    INSERT INTO #Temp (Year, WeekNo) VALUES (DATEPART(YYYY, GETDATE()),@WeekNo)
    SET @Count = @Count+1
END

INSERT INTO #Temp (Year, WeekNo) VALUES (DATEPART(YYYY, GETDATE())+1,1)

答案 2 :(得分:0)

你必须解决你想要处理的问题,说从2015年到2016年的过渡。你可以使用这样的代码来帮助解决你的7周前瞻:

testValue2

这假设您可以在每年年初的“重置”到1月1日 - 如果您进行真正的7天前进,您可以进入不稳定的情景(例如,从某些年份缺少第1周,例如2016年)。