【问题标题】:Get last 5 week range获取最近 5 周的范围
【发布时间】:2015-12-28 01:49:00
【问题描述】:

我需要在五个单独的列表中加载过去五周的信息,无论是什么日期。所以这周,我需要在这一周之前的最后 5 周。下周我需要在那之前的最后 5 周,其中包括这一周。如果这有意义并且不会让您感到困惑?

所以基本上:

..BETWEEN '2015-09-21' AND '2015-09-27'

必须替换为:

SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,7,GETDATE()),6)

这很好用,第二周也一样:

SELECT DATEADD(wk,DATEDIFF(wk,14,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,14,GETDATE()),6)

但是从那以后,它不再起作用了。我得到的结果与手动添加日期不同。

SELECT DATEADD(wk,DATEDIFF(wk,21,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,21,GETDATE()),6)

我的代码有问题吗?

【问题讨论】:

  • 大概你正在使用 SQL Server。您应该这样标记问题。
  • 查看此链接会有所帮助:stackoverflow.com/questions/6089960/…
  • 你得到什么结果?查询 SELECT DATEADD(wk,DATEDIFF(wk,21,GETDATE()),0), DATEADD(wk,DATEDIFF(wk,21,GETDATE()),6) 是否返回了意外的内容?
  • @Greg,您的专栏中有时间部分还是只有日期?您是否尝试添加 7 天而不是 6 天? DATEADD(wk,DATEDIFF(wk,21,GETDATE()),7)
  • 可能在前两周你在周日没有任何结果。对于 date 类型,2015-09-27 00:00:00 将计算所有结果,但不适用于 datetime 类型。

标签: sql-server


【解决方案1】:

如果您将 BETWEEN 用于 datetime 数据类型,则应在一周的开始添加 7 天以找到该周的结束

DATEADD(wk,DATEDIFF(wk,21,GETDATE()),7)

【讨论】:

    【解决方案2】:

    我认为您可以使用类似的代码而不是手动设置number

    DECLARE @TestDate AS DATETIME
    DECLARE @WeekNumber AS INTEGER
    
    -- previous 5 weeks
    SELECT @TestDate = GETDATE()
    SELECT @WeekNumber = -5
    
    WHILE @WeekNumber < 0
    BEGIN
    
        SELECT @TestDate,
            @WeekNumber,
            DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 0) AS StartDate,
            DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 6) AS EndDate
    
        SELECT @WeekNumber = @WeekNumber + 1
    
    END
    
    -- previous 5 weeks from next wednesday
    SELECT @TestDate = DATEADD(DAY, 7, GETDATE())
    SELECT @WeekNumber = -5
    
    WHILE @WeekNumber < 0
    BEGIN
    
        SELECT @TestDate,
            @WeekNumber,
            DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 0) AS StartDate,
            DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 6) AS EndDate
    
        SELECT @WeekNumber = @WeekNumber + 1
    
    END
    

    请注意WHILE 循环的内容不会改变。我使用相同的代码来提取有关两个不同日期的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 2014-03-01
      • 1970-01-01
      • 2021-10-20
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      相关资源
      最近更新 更多