Solved

SQL Query - convert decimal to hours and minutes

Posted on 2011-03-22
7
2,797 Views
Last Modified: 2012-05-11
I have a query:-

select SUM(timetaken)
from dbo.ACTIONS
where who = 'roybridge' and Whe_ >= '01/03/2011'

Open in new window


Currently, the result = 367.069999999999

How can I modify the above query so that the result is shown in hours and minutes?

Thanks
0
Comment
Question by:Chris Millard
7 Comments
 
LVL 23

Expert Comment

by:wdosanjos
Comment Utility
Try this:

select 
select CAST(CAST(SUM(timetaken) / 24 as int) as nvarchar(10)) + 'h ' 
     + CAST(CAST(SUM(timetaken) % 24 as int) as nvarchar(10)) + 'm' as SumTimeTaken
from dbo.ACTIONS
where who = 'roybridge' and Whe_ >= '01/03/2011'

Open in new window

0
 
LVL 23

Expert Comment

by:wdosanjos
Comment Utility
Sorry, it included an extra 'select', which is removed below:

select CAST(CAST(SUM(timetaken) / 24 as int) as nvarchar(10)) + 'h ' 
     + CAST(CAST(SUM(timetaken) % 24 as int) as nvarchar(10)) + 'm' as SumTimeTaken
from dbo.ACTIONS
where who = 'roybridge' and Whe_ >= '01/03/2011'

Open in new window

0
 
LVL 28

Assisted Solution

by:Ryan McCauley
Ryan McCauley earned 166 total points
Comment Utility
What's the value currently - is the whole part hours, and the decimal part fractional hours? Or is the whole part minutes, and you just want to drop the fractional part? Also, what do you want the output to look like - "HH:MM", or "X hours, Y minutes"?

Assuming your number is whole minutes and you want to drop the fraction, you could do something like this:

DECLARE @number float
    SET @number = 367.069999999999

 SELECT CONVERT(VARCHAR, CONVERT(INT, @Number/60)) + ' hours, ' + CONVERT(VARCHAR, CONVERT(INT, @Number % 60)) + ' minutes'

Open in new window


If you want something different, please post some more details.
0
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 17

Author Comment

by:Chris Millard
Comment Utility
@wdosanjos - when I execute the SQL query, I get the following eror:-

Msg 402, Level 16, State 1, Line 1
The data types float and int are incompatible in the modulo operator.

Open in new window

0
 
LVL 23

Accepted Solution

by:
wdosanjos earned 167 total points
Comment Utility
Sorry about that.

select CAST(FLOOR(SUM(timetaken) / 60) as nvarchar(10)) + 'h ' 
     + CAST(FLOOR((SUM(timetaken) / 60 - FLOOR(SUM(timetaken) / 60)) * 60) as nvarchar(10)) + 'm' as SumTimeTaken
from dbo.ACTIONS
where who = 'roybridge' and Whe_ >= '01/03/2011'

Open in new window

0
 
LVL 40

Assisted Solution

by:Sharath
Sharath earned 167 total points
Comment Utility
This will convert the duration into HH:MI:SS format. try this.
DECLARE  @dur INT 

SELECT @dur = SUM(timetaken) 
  FROM dbo.ACTIONS 
 WHERE who = 'roybridge' 
       AND Whe_ >= '01/03/2011' 

SELECT CASE 
         WHEN @dur / 3600 < 10 THEN '0' + CONVERT(VARCHAR(10),@dur / 3600) 
         ELSE CONVERT(VARCHAR(10),@dur / 3600) 
       END + ':' + CASE 
                     WHEN (@dur%3600) / 60 < 10 THEN '0' + CONVERT(VARCHAR(10),(@dur%3600) / 60)
                     ELSE CONVERT(VARCHAR(10),(@dur%3600) / 60) 
                   END + ':' + CASE 
                                 WHEN @dur%60 < 10 THEN '0' + CONVERT(VARCHAR(10),@dur%60) 
                                 ELSE CONVERT(VARCHAR(10),@dur%60) 
                               END

Open in new window

0
 
LVL 17

Author Closing Comment

by:Chris Millard
Comment Utility
I'm spliting the points between everyone. Basically, my query was wrong. The query was using the format mm/dd/yyyy whereas I was expecting dd/mm/yyyy. When I modify the query, I get the results I was expecting.
0

Featured Post

Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

Join & Write a Comment

Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
This video discusses moving either the default database or any database to a new volume.

763 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

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now