代码之家  ›  专栏  ›  技术社区  ›  keithwarren7

在T-SQL中确定“本周”

  •  3
  • keithwarren7  · 技术社区  · 16 年前

    这是特定于美国的区域设置,其中它认为一周的开始时间是星期日;我希望能够要求SQL提供下一个星期日相对于今天的日期[GetDate()]。如果今天是1月15日,则返回1月18日;如果今天是星期日,则返回下一个星期日,即25日。这对于写一个UDF来说是微不足道的,但是我很好奇是否有人有其他的诀窍/想法?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Cade Roux    16 年前
    DECLARE @d AS datetime
    SET @d = '1/15/2009'
    PRINT @d
    PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
    SET @d = '1/18/2009'
    PRINT @d
    PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
    
    -- So it should be able to be used inline pretty efficiently:
    DATEADD(day, 8 - DATEPART(weekday, datecolumn), datecolumn)
    
    -- If you want to change the first day for a different convention, simply use SET DATEFIRST before performing the operation
    -- e.g. for Monday: SET DATEFIRST 1
    -- e.g. for Saturday: SET DATEFIRST 6
    
    DECLARE @restore AS int
    SET @restore = @@DATEFIRST
    SET DATEFIRST 1
    
    DECLARE @d AS datetime
    SET @d = '1/15/2009'
    PRINT @d
    PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
    SET @d = '1/19/2009'
    PRINT @d
    
    PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
    SET DATEFIRST @restore
    
        2
  •  2
  •   dkretz    16 年前

    今天的星期几:
    选择@dow=datepart(d,getdate()),其中1=sunday,7=saturday

    你想增加足够的天数来获得下个星期日。

    如果今天是1=星期日,则加7
    如果今天是2=星期一,则加6
    如果今天是3=星期二,则加5 等。

    所以你总是增加8-今天的一周价值。

    选择dateadd(d,getdate(),8-@dow(getdate))。

    编辑:但是凯德赢了!