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

后端 未结 22 1819
没有蜡笔的小新
没有蜡笔的小新 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:29

    Try Below Code:

    declare @dt datetime='2018-03-15 05:16:00.000'
    IF (Select (DatePart(DAY,@dt)%7))>0
      Select  (DatePart(DAY,@dt)/7) +1
    ELSE
      Select  (DatePart(DAY,@dt)/7)
    
    0 讨论(0)
  • 2020-11-27 16:31

    Here are 2 different ways, both are assuming the week starts on monday

    If you want weeks to be whole, so they belong to the month in which they start: So saturday 2012-09-01 and sunday 2012-09-02 is week 4 and monday 2012-09-03 is week 1 use this:

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

    If your weeks cut on monthchange so saturday 2012-09-01 and sunday 2012-09-02 is week 1 and monday 2012-09-03 is week 2 use this:

    declare @date datetime = '2012-09-01'
    select datediff(week, dateadd(week, 
      datediff(day,0,dateadd(month,
        datediff(month,0,@date),0))/7, 0),@date-1) + 1
    

    I recieved an email from Gerald. He pointed out a flaw in the second method. This should be fixed now

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

    There is an inbuilt option to get the week number of the year

    **select datepart(week,getdate())**
    
    0 讨论(0)
  • 2020-11-27 16:31

    You can simply get week number by getting minimum week number of month and deduct it from week number. Suppose you have a table with dates

    select
        emp_id, dt , datepart(wk,dt) - (select min(datepart(wk,dt))
    from
        workdates ) + 1 from workdates
    
    0 讨论(0)
  • 2020-11-27 16:35

    Check this out... its working fine.

    declare @date as datetime = '2014-03-10'
    select DATEPART(week,@date) - DATEPART(week,cast(cast(year(@date) as varchar(4))+'-' + cast(month(@date) as varchar(2)) + '-01' as datetime))+1
    
    0 讨论(0)
  • 2020-11-27 16:35

    Here's a suggestion for getting the first and last days of the week for a month:

    -- Build a temp table with all the dates of the month 
    drop table #tmp_datesforMonth 
    go
    
    declare @begDate datetime
    declare @endDate datetime
    
    set @begDate = '6/1/13'
    set @endDate = '6/30/13';
    
    WITH N(n) AS  
    (   SELECT 0  
            UNION ALL 
        SELECT n+1 
        FROM N 
        WHERE n <= datepart(dd,@enddate)
    )
    SELECT      DATEADD(dd,n,@BegDate) as dDate 
    into #tmp_datesforMonth
    FROM        N
    WHERE       MONTH(DATEADD(dd,n,@BegDate)) = MONTH(@BegDate)
    
    --- pull results showing the weeks' dates and the week # for the month (not the week # for the current month) 
    
    select  MIN(dDate) as BegOfWeek
    , MAX(dDate) as EndOfWeek 
    , datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, dDate), 0)), 0), dDate) as WeekNumForMonth 
    from #tmp_datesforMonth
    group by datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, dDate), 0)), 0), dDate) 
    order by 3, 1
    
    0 讨论(0)
提交回复
热议问题