Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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') // **returns 48** 

The returned value 48 is the week number of the year.

Instead of 48, I want to get 1, 2, 3 or 4 (week number of the month). I think the week number of the month can be achieved by modules with Month Number of this week. For e.g.

Select DATEPART(week, '2012/11/30')%MONTH('2012/11/30') 

But I want to know is there other built-in functions to get WeekNumber of the month in MS SQL SERVER.

like image 224
Nay Lin Aung Avatar asked Oct 29 '12 05:10

Nay Lin Aung


People also ask

How do I display a week wise data in a month in SQL Server?

How Do You Group Data by Week in SQL Server? SQL Server provides a function called DATEPART() , which returns a specified part (year, quarter, month, week, hour, minute, etc.) of a specified date. ORDER BY DATEPART(week, RegistrationDate);

How do I get the first week of the month in SQL Server?

Here is one of the method to find the monthly week number. In this script, I have used DATEADD function along with EOMONTH function to get the first day of the month for the given date. Then used DATEPART with week parameter to get the yearly week number for the given date and the first day of month.

How do I get the number of months in SQL?

The MONTH() function returns the month part for a specified date (a number from 1 to 12).


1 Answers

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 date = '2012-09-01' SELECT (day(datediff(d,0,@date)/7*7)-1)/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 date = '2012-09-01' SELECT    datediff(ww,datediff(d,0,dateadd(m,datediff(m,7,@date),0)     )/7*7,dateadd(d,-1,@date))+1 

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

I received an email from Ben Wilkins. He pointed out a flaw in the first method. This should be fixed now

like image 135
t-clausen.dk Avatar answered Sep 22 '22 12:09

t-clausen.dk