How to get week number of the month from the date in sql server 2008

后端 未结 22 1820
没有蜡笔的小新
没有蜡笔的小新 2020-11-27 15:52

In SQL Statement in microsoft sql server, there is a built-in function to get week number but it is the week of the year.

Select DatePart(week, \'2012/11/30\         


        
相关标签:
22条回答
  • 2020-11-27 16:45

    No built-in function. It depends what you mean by week of month. You might mean whether it's in the first 7 days (week 1), the second 7 days (week 2), etc. In that case it would just be

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

    If you want to use the same week numbering as is used with DATEPART(week,), you could use the difference between the week numbers of the first of the month and the date in question (+1):

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

    Or, you might need something else, depending on what you mean by the week number.

    0 讨论(0)
  • 2020-11-27 16:45

    Here is the query that brings the week number on whatever the startday and endday of the week it may be.

    SET DATEFIRST 2    
    
    DECLARE @FROMDATE DATE='12-JAN-2015'
    -- Get the first day of month
    DECLARE @ALLDATE DATE=DATEADD(month, DATEDIFF(month, 0, @FROMDATE), 0)
    DECLARE @FIRSTDATE DATE
    
    
    ;WITH  CTE as
    (
         -- Get all dates in that month
         SELECT 1 RNO,CAST(@ALLDATE AS DATE) as DATES 
         UNION ALL
         SELECT RNO+1, DATEADD(DAY,1,DATES )
         FROM    CTE
         WHERE   DATES < DATEADD(MONTH,1,@ALLDATE)
    )
    -- Retrieves the first day of week, ie, if first day of week is Tuesday, it selects first Tuesday 
    SELECT TOP 1 @FIRSTDATE =   DATES 
    FROM    CTE 
    WHERE DATEPART(W,DATES)=1
    
    SELECT (DATEDIFF(DAY,@FIRSTDATE,@FROMDATE)/7)+1 WEEKNO
    

    For more information I have answered for the below question. Can check that.

    • How do I find week number of a date according to DATEFIRST
    0 讨论(0)
  • 2020-11-27 16:47
    select @DateCreated, DATEDIFF(WEEK, @DateCreated, GETDATE())
    
    0 讨论(0)
  • 2020-11-27 16:48

    There is no inbuilt function to get you the week number. I dont think dividing will help you anyway as the number of weeks in a month is not constant.

    http://msdn.microsoft.com/en-us/library/bb675168.aspx

    I guess you can divide the number(48) by 4 and take the modules of the same and project that as the week number of that month, by adding one to the result.

    0 讨论(0)
  • 2020-11-27 16:49

    Similar to the second solution, less code:

    declare @date datetime = '2014-03-31'
    SELECT DATEDIFF(week,0,@date) - (DATEDIFF(week,0,DATEADD(dd, -DAY(@date)+1, @date))-1)
    
    0 讨论(0)
  • 2020-11-27 16:50

    A dirty but easy one liner using Dense_Rank function. Performance WILL suffer, but effective none the less.

    DENSE_RANK()over(Partition by Month(yourdate),Year(yourdate) Order by Datepart(week,yourdate) asc) as Week
    
    0 讨论(0)
提交回复
热议问题