如何从sql server 2008中的日期获取月份的周数

Nay*_*ung 26 t-sql sql-server-2008

在microsoft sql server的SQL语句中,有一个内置函数来获取周数,但它是一年中的一周.

Select DatePart(week, '2012/11/30') // **returns 48**
Run Code Online (Sandbox Code Playgroud)

返回值48是一年中的周数.

而不是48,我想获得1,2,3或4(本月的周数).我认为本月的周数可以通过本周月数的模块来实现.例如

Select DATEPART(week, '2012/11/30')%MONTH('2012/11/30')
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有其他内置函数来获取MS SQL SERVER中本月的WeekNumber.

t-c*_*.dk 48

这里有两种不同的方式,两种方式都假设周一开始

如果你想要整周,那么他们属于他们开始的那个月:所以星期六2012-09-01和星期日2012-09-02是第4周和星期一2012-09-03是第1周使用这个:

declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
Run Code Online (Sandbox Code Playgroud)

如果您的周变为月变化,那么星期六2012-09-01和星期日2012-09-02是第1周,星期一2012-09-03是第2周使用此:

declare @date datetime = '2012-09-01'
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1
Run Code Online (Sandbox Code Playgroud)

  • 不,它没有缺陷.它从本月的第一个整周开始.第1周开始于2015-10-05(星期一)它在上周结束,同月至少有一天.将星期日2015-11-01作为10月第4周的最后一天.正如答案中所解释的那样.也许你对第二个答案的文字感到困惑 (3认同)

小智 11

DECLARE @DATE DATETIME
SET @DATE = '2013-08-04'

SELECT DATEPART(WEEK, @DATE)  -
    DATEPART(WEEK, DATEADD(MM, DATEDIFF(MM,0,@DATE), 0))+ 1 AS WEEK_OF_MONTH
Run Code Online (Sandbox Code Playgroud)


Gil*_*ilM 8

没有内置功能。这取决于您所说的每个月的一周是什么意思。您可能指的是前 7 天(第 1 周)、后 7 天(第 2 周)等。在这种情况下,它只是

(DATEPART(day,@Date)-1)/7 + 1

如果您想使用与 DATEPART(week,) 相同的周编号,您可以使用该月第一天的周编号与相关日期之间的差值 (+1):

(DATEPART(week,@Date)- DATEPART(week,DATEADD(m, DATEDIFF(m, 0, @Date), 0))) + 1

或者,您可能需要其他内容,具体取决于周数的含义。


Bry*_*cht 7

只需查看日期,看看它落在什么范围内。

范围 1-7 是第一周,范围 8-14 是第二周,以此类推。

SELECT 
CASE WHEN DATEPART(day,yourdate) < 8 THEN '1' 
  ELSE CASE WHEN DATEPART(day,yourdate) < 15 then '2' 
    ELSE CASE WHEN  DATEPART(day,yourdate) < 22 then '3' 
      ELSE CASE WHEN  DATEPART(day,yourdate) < 29 then '4'     
        ELSE '5'
      END
    END
  END
END
Run Code Online (Sandbox Code Playgroud)