Конечно. Легко, но не совсем ... просто:
declare @hours float
set @hours = -9.8
select substring('- ',2+convert(int,sign(@hours)),1) -- sign
+ right('00' + convert(varchar, floor(abs(@hours))) , 2 ) -- hours component
+ ':' -- delimiter
+ right('00' + convert(varchar,round( 60*(abs(@hours)-floor(abs(@hours))) , 0 ) ) , 2 ) -- minutes
Еще один вариант, который даст правильный результат. Возможно, вам придется настроить его на округление минут и убедиться, что оба поля имеют ширину 2 цифры.
declare @hours float
set @hours = -9.8
select convert(varchar, datediff(minute,dateadd(minute,@hours*60,convert(datetime,'')),'') / 60 )
+ ':' + convert(varchar, datediff(minute,dateadd(minute,@hours*60,convert(datetime,'')),'') % 60 )