TSQL Calculate week number of the month

前端 未结 5 714
逝去的感伤
逝去的感伤 2020-12-06 13:20

I want to calculate the week number of the month,I want to calculate the week number whether its odd or even week how can I get this in TSQL ? Thanks all!

相关标签:
5条回答
  • 2020-12-06 13:45

    Try this:

    SELECT (DATEPART(d, '02/07/2011')/7)%2 AS WeekNo, --Replace your date column in place of '02/07/2011'
           CASE (DATEPART(d, '02/07/2011')/7)%2 
                    WHEN 1 THEN 'Odd' 
                    ELSE 'Even'
                 END AS WeekType
    
    0 讨论(0)
  • 2020-12-06 13:48

    I think this makes the approach very obvious:

    DECLARE @DayOne DATETIME
    DECLARE @ThisDay DATETIME
    SET @ThisDay = GETDATE()
    SET @DayOne = CAST(CAST(MONTH(@ThisDay) AS VARCHAR) + '/1/' + CAST(YEAR(@ThisDay) AS VARCHAR) AS DATETIME)
    SELECT (DATEPART(wk, @ThisDay) - DATEPART(wk, @DayOne) + 1) AS [Week Of Month]
    

    SQL Server 2012 has a CONCAT function that can be used to more easily build the DayOne string:

    DECLARE @DayOne DATETIME
    DECLARE @ThisDay DATETIME
    SET @ThisDay = GETDATE()
    SET @DayOne = CAST(CONCAT(MONTH(@ThisDay), '/1/', YEAR(@ThisDay)) AS DATETIME)
    SELECT (DATEPART(wk, @ThisDay) - DATEPART(wk, @DayOne) + 1) AS [Week Of Month]
    
    0 讨论(0)
  • 2020-12-06 13:59

    This gives you the week of the date @dt within its month. There is a 2nd column that uses a CASE statement over the expression, to show either "Odd" or "Even"

    declare @dt datetime
    set @dt = GETDATE()
    
    select
        WhichWeekOfMonth = datepart(wk, @dt)
                         - datepart(wk,dateadd(m, DATEDIFF(M, 0, @dt), 0)) + 1,
        case when (datepart(wk, @dt)
                - datepart(wk,dateadd(m, DATEDIFF(M, 0, @dt), 0)) + 1) % 2 = 1
             then 'Odd' else 'Even' end
    
    0 讨论(0)
  • 2020-12-06 14:03

    How about something readable, easily customizable, and predictable...

    DECLARE @dayOfMonth AS INT;
    SET @dayOfMonth = DATEPART(DAY, '3/14/2013');
    SELECT CASE 
        WHEN @dayOfMonth < 8 THEN 1
        WHEN @dayOfMonth < 15 THEN 2
        WHEN @dayOfMonth < 22 THEN 3
        ELSE 4
    END AS weekOfMonth;
    
    0 讨论(0)
  • 2020-12-06 14:04

    It will give you week Number for Every month

    declare @dates datetime
    select @dates='2011-03-22'
    SELECT datepart(dd,@dates), ceiling (cast(datepart(dd,@dates)as numeric(38,8))/7)  
    
    0 讨论(0)
提交回复
热议问题