从SQL Server中的周数获取周开始日期和周结束日期

dig*_*uru 87 sql sql-server sql-server-2005 date week-number

我有一个查询计算会员在数据库中的结婚日期...

Select 
  Sum(NumberOfBrides) As [Wedding Count], 
  DATEPART( wk, WeddingDate) as [Week Number],
  DATEPART( year, WeddingDate) as [Year]
FROM  MemberWeddingDates
Group By DATEPART( year, WeddingDate), DATEPART( wk, WeddingDate)
Order By Sum(NumberOfBrides) Desc
Run Code Online (Sandbox Code Playgroud)

如何在结果集中表示每周的开始和结束时计算出来?

Select 
      Sum(NumberOfBrides) As [Wedding Count], 
      DATEPART( wk, WeddingDate) as [Week Number],
      DATEPART( year, WeddingDate) as [Year],
      ??? as WeekStart,
      ??? as WeekEnd

    FROM  MemberWeddingDates
    Group By DATEPART( year, WeddingDate), DATEPART( wk, WeddingDate)
    Order By Sum(NumberOfBrides) Desc
Run Code Online (Sandbox Code Playgroud)

Rob*_*Day 145

您可以找到星期几,并在几天内添加日期以获取开始日期和结束日期.

DATEADD(dd, -(DATEPART(dw, WeddingDate)-1), WeddingDate) [WeekStart]

DATEADD(dd, 7-(DATEPART(dw, WeddingDate)), WeddingDate) [WeekEnd]
Run Code Online (Sandbox Code Playgroud)

你可能也想看看从日期开始的时间.

  • 它不会"破坏"它,它将使用datefirst将WeekStart =设置为DateFirst所说的一周的第一天.您的版本将始终在星期一和星期日作为一周的开始和结束,而不是将服务器设置为用作一周的开始和结束的版本 (4认同)
  • 请记住,将"DATEFIRST"设置为7以外的任何内容都会打破此问题. (3认同)
  • 星期一'set datefirst 1'(http://msdn.microsoft.com/en-ie/library/ms181598.aspx) (3认同)

Tom*_*lak 39

这是一个DATEFIRST不可知的解决方案:

SET DATEFIRST 4     /* or use any other weird value to test it */
DECLARE @d DATETIME

SET @d = GETDATE()

SELECT
  @d ThatDate,
  DATEADD(dd, 0 - (@@DATEFIRST + 5 + DATEPART(dw, @d)) % 7, @d) Monday,
  DATEADD(dd, 6 - (@@DATEFIRST + 5 + DATEPART(dw, @d)) % 7, @d) Sunday
Run Code Online (Sandbox Code Playgroud)

  • 这很棒,但周一不适合我.星期一,我不得不加"0 - ".我的星期一代码现在是:DATEADD(dd,0 - (@@ DATEFIRST + 5 + DATEPART(dw,@ d))%7,@ d) (10认同)

hkr*_*itz 16

你也可以用这个:

  SELECT DATEADD(day, DATEDIFF(day, 0, WeddingDate) /7*7, 0) AS weekstart,
         DATEADD(day, DATEDIFF(day, 6, WeddingDate-1) /7*7 + 7, 6) AS WeekEnd
Run Code Online (Sandbox Code Playgroud)