?
Solved

SQL Query - convert decimal to hours and minutes

Posted on 2011-03-22
7
Medium Priority
?
3,870 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
ID: 35191380
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
ID: 35191390
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 664 total points
ID: 35191396
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
Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

 
LVL 17

Author Comment

by:Chris Millard
ID: 35191533
@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 668 total points
ID: 35191963
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 41

Assisted Solution

by:Sharath
Sharath earned 668 total points
ID: 35191991
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
ID: 35199994
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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

SQL Server engine let you use a Windows account or a SQL Server account to connect to a SQL Server instance. This can be configured immediatly during the SQL Server installation or after in the Server Authentication section in the Server properties …
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…

750 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