?
Solved

Calculate elapsed business hours - SQL 2008

Posted on 2010-11-24
5
Medium Priority
?
956 Views
Last Modified: 2012-05-10
Our business is open 9-5, Monday to Friday.  I am using the SQL function in the attached text file to calculate the elapsed business hours between two datetimes.  The variables are as follows:
@startdate - the start datetime of the period (datetime)
@enddate - the end date of the period (datetime)
@starttime - the start of the business day (vchar(9))
@endtime - the end of the business day (vchar(9))

The function is called with a SQL statement that passes the values of these variables to the function.

Does anyone have any idea how I would go about modifying this function to exclude Saturdays and Sundays from the calculation?

Thanks!
business-hours.txt
0
Comment
Question by:I_play_with_DNA
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
5 Comments
 
LVL 17

Expert Comment

by:OriNetworks
ID: 34208889
FIrst I would ask why the times are separated from the dates.

Create a new combined date/time
e.g.
@startdate = '1/1/2010'
@enddate = ' 1/2/2010'
@starttime = '9:00 am'
@endtime = '12:30 pm'

@newstartdate = '1/1/2010 9:00:00 am'
@newenddate = '1/2/2010 12:30:00 pm'

select datediff(minute,@newstartdate,@newenddate)/60 = the amount of hours spent
0
 
LVL 17

Expert Comment

by:OriNetworks
ID: 34208928
sorry i shouldnt have thought it was that easy.

Add to that

select @minutesUsed=datediff(minute,@newstartdate,@newenddate)

Select @minutesUsed=(@minutesUsed-(case when @StartDate<>@EndDate then datediff(day,@startdate,@enddate)*900))

this will remove the after hours minutes between days. You can also do a similar function to check for weekends that have passed.
0
 
LVL 7

Accepted Solution

by:
rmm2001 earned 668 total points
ID: 34208994
Put in a where DATEPART(weekday, @startdate) NOT IN (1, 7) (1 is sunday...7 is saturday)
0
 
LVL 7

Assisted Solution

by:Cboudroz
Cboudroz earned 668 total points
ID: 34209882
add this in the where clause:

and DATEPART(dw,DateValue) not in (1,7)
0
 
LVL 17

Assisted Solution

by:OriNetworks
OriNetworks earned 664 total points
ID: 34210702
Ithe datelart cannot be and otherwise it will evaluate as false for start or end date on weekends and not return a result. You would have to add a case statement with the datepart to subtract those days but this is not good either because it would not calculate weekends in between so oh have to use it in conjunction with a datediff to find out how many weekends are between those dates.
,
0

Featured Post

Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article we will learn how to fix  “Cannot install SQL Server 2014 Service Pack 2: Unable to install windows installer msi file” error ?
What if you have to shut down the entire Citrix infrastructure for hardware maintenance, software upgrades or "the unknown"? I developed this plan for "the unknown" and hope that it helps you as well. This article explains how to properly shut down …
Via a live example, show how to backup a database, simulate a failure backup the tail of the database transaction log and perform the restore.
Via a live example, show how to setup several different housekeeping processes for a SQL Server.
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question