Answered by:
How to write a Stored Procedure to find the total working days for an employee in a specified month?

Question
-
I have created a database with two fields "EmpID" (int) and "LeaveDate" (DateTime) using SQL Server 2005.
How to create a stored procedure to find the total working days for an employee in a specified month?
The Total Working Days should be as follows;
Total Working Days = (Total days in a month) - ( (Weekends: Sat and Sun) + (Number of days' Leave taken by the employee) ).
The database fields may be changed as per the requirements.
How to implement this Stored Procedure? Please give sample queries to do this.Wednesday, February 27, 2013 12:18 PM
Answers
-
The simplest solution is to use a Calendar table.
See also this blog post
Calculating number of workdays between 2 dates
For every expert, there is an equal and opposite expert. - Becker's Law
My blog- Marked as answer by Kalman Toth Friday, March 8, 2013 4:25 PM
Thursday, February 28, 2013 2:58 AM
All replies
-
DECLARE @DATE DATETIME SET @DATE = GETDATE() SELECT 20 + COUNT(*) FROM ( SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @DATE), 28) AS THEDATE UNION ALL SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @DATE), 29) UNION ALL SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @DATE), 30) ) AS DAYS WHERE DATEPART(DAY, THEDATE) > 28 AND DATEDIFF(DAY, 0, THEDATE) % 7 < 5
Months will always have 20 working days in the first 28 days of the month.
You'll only need to check for the last remaining days of the month with the above code.
- Edited by Johnny Bell Jnr Wednesday, February 27, 2013 12:29 PM
Wednesday, February 27, 2013 12:27 PM -
you may need to pass the year also along with month, else for February month you will get some differences.
1. get total number of LeaveDate in that month from that table.
select COUNT(*) from Table1 where DATEPART(month, LeaveDate) = DATEPART(month, GETDATE()) -- use the date where you want to calculate the months' data AND DATEPART(year, LeaveDate) = DATEPART(year, GETDATE()) -- use the date where you want to calculate the months' data
2. Get total weekdays or weekends in that month of the year : http://blog.tech-cats.com/2008/02/get-business-days-and-working-hours-in.html,
http://sqltutorials.blogspot.se/2007/06/sql-statement-get-total-working-day-in.html
Get your result by substracting result of 1 from result 2.
regards
joon
- Edited by Joon84 Wednesday, February 27, 2013 12:55 PM
Wednesday, February 27, 2013 12:53 PM -
The simplest solution is to use a Calendar table.
See also this blog post
Calculating number of workdays between 2 dates
For every expert, there is an equal and opposite expert. - Becker's Law
My blog- Marked as answer by Kalman Toth Friday, March 8, 2013 4:25 PM
Thursday, February 28, 2013 2:58 AM -
Hi Fahhad,
You need a loop to check all of the days of the month. You should also have a table in which the details of leave days of the employees are stored. Use this
select case substring(datename(dw,cast('12-31-12' as datetime)),1,3) when 'Sat' then 'Yes' when 'Sun' then 'Yes' else 'No' end
go
to exclude those weekends.
Many Thanks & Best Regards, Hua Min
Thursday, February 28, 2013 4:05 AM