August 30, 2012 at 6:26 am
Hi,
Anyone got a simple method for converting decimal time duration to HH:MM.
For example:
1.5 to 1:30
30.75 to 30:45
95.25 to 95:15
etc
Many thanks for any assistance.
Matthew
August 30, 2012 at 7:06 am
Hey,
This will do it BUT - You arent getting days in that.
DECLARE @hours decimal(15,4)
SELECT @hours = 28.75
SELECT RIGHT('00' + CONVERT(varchar(2),FLOOR(@hours)),2)
+':'
+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((@hours-FLOOR(@hours))*60))),2)
+':'
+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((@hours-FLOOR(@hours))*60)-FLOOR(((@hours-FLOOR(@hours))*60)))*60),2)
Here's the thread from google. There's another method there too which will get you the full datetime data type too.
http://www.dbforums.com/microsoft-sql-server/1202305-converting-decimal-time.html
HTH
Ta
August 30, 2012 at 7:14 am
declare @time decimal(5,2);
set @time = 95.25;
select cast(@time as int)+(((@time-cast(@time as int))*.60));
August 30, 2012 at 7:15 am
Here's my first guess at it; i left lots of stuff in there to look at to help understand it.
With PayRollHours (TheTime)
As
(
SELECT 1.5 UNION ALL
SELECT 30.75 UNION ALL
SELECT 40.00 UNION ALL
SELECT 95.25
)
SELECT DATEADD(minute,TotalMinutesInteger,'1900-01-01') ResultsAsDateTime,
CONVERT(VARCHAR(5),DATEADD(minute,TotalMinutesInteger,'1900-01-01'),108) ResultAsString,
*
FROM (
SELECT TheTime * 60 AS TotalMinutes,
CONVERT(int,TheTime * 60 ) As TotalMinutesInteger,
CONVERT(int,TheTime * 60 ) / 60 As HoursPortion,
CONVERT(int,TheTime * 60 ) %60 As MinutesPortion
FROM PayRollHours
) X
Lowell
August 30, 2012 at 7:18 am
Thats handy Lowell, nice one. All options there for you OP
August 30, 2012 at 7:21 am
@Cnporteus, yes saw that one, didn't work for high enough hours though.
@Laurie - Thanks for this tweaked it to:
declare @time decimal(5,2);
set @time = 95.75
select replace(cast(convert(decimal(10,2),cast(@time as int)+(((@time-cast(@time as int))*.60))) as varchar),'.',':')
Which seems to work nicely
Thanks a lot.
August 30, 2012 at 7:30 am
Thanks to you too Lowell for your input. Squirelled away for later use I'm sure !
Matthew
August 30, 2012 at 7:36 am
m.dunster (8/30/2012)
@Laurie - Thanks for this tweaked it to:
declare @time decimal(5,2);
set @time = 95.75
select replace(cast(convert(decimal(10,2),cast(@time as int)+(((@time-cast(@time as int))*.60))) as varchar),'.',':')
Which seems to work nicely
Thanks a lot.
Even better!
BTW - I left a surplus pair of brackets in - removed below:
select replace(cast(convert(decimal(10,2),cast(@time as int)+((@time-cast(@time as int))*.60)) as varchar),'.',':')
Viewing 8 posts - 1 through 7 (of 7 total)
You must be logged in to reply to this topic. Login to reply