将小数时间转换为小时和分钟

use*_*772 9 t-sql sql-server time sql-server-2008

一直在努力解决这个问题,似乎无法找到正确的答案,尽管有很多提及转换,但没有具体的工作.

我需要将数据类型为float的时间转换为小时和分钟.所以13.50为13.30.数据类型固定为DB中的float,因此无法更改.DB是SQL Server 2008R2

试过:

cast(cast(floor(fdsViewTimesheet.perStandardHours) as    
float(2))+':'+cast(floor(100*(    
fdsViewTimesheet.perStandardHours - floor(fdsViewTimesheet.perStandardHours)))as 
float(2)) as time) AS STANDARD_HOURS
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息"Explicit conversion from data type real to time is not allowed"尝试as char而不是as float查询挂起.

我究竟做错了什么?我只是want to convert a float value into hours and minutes.如果有人能指出我正确的方向,将不胜感激.

rca*_*ier 7

你可以试试:

DECLARE @HOURS decimal(7,4) = 20.5599
SELECT  CAST(CONVERT(VARCHAR,DATEADD(SECOND, @HOURS * 3600, 0),108) AS TIME)
Run Code Online (Sandbox Code Playgroud)

输出:20:33:35

但请记住:在24小时内输入MSSQL中的时间

如果您想要超过24小时,请尝试:

DECLARE @HOURS decimal(7,4) = 25.5599
SELECT 
RIGHT('0' + CAST (FLOOR(@HOURS) AS VARCHAR), 2) + ':' + 
RIGHT('0' + CAST(FLOOR((((@HOURS * 3600) % 3600) / 60)) AS VARCHAR), 2) + ':' + 
RIGHT('0' + CAST (FLOOR((@HOURS * 3600) % 60) AS VARCHAR), 2)
Run Code Online (Sandbox Code Playgroud)

输出:25:33:35

- 更新

十分钟到超过24小时

DECLARE @MINUTES decimal(7,4) = 77.9
SELECT
RIGHT('0' + CAST (FLOOR(COALESCE (@MINUTES, 0) / 60) AS VARCHAR (8)), 2) + ':' + 
RIGHT('0' + CAST (FLOOR(COALESCE (@MINUTES, 0) % 60) AS VARCHAR (2)), 2) + ':' + 
RIGHT('0' + CAST (FLOOR((@MINUTES* 60) % 60) AS VARCHAR (2)), 2);
Run Code Online (Sandbox Code Playgroud)

输出:01:17:54


Mat*_*eld 4

这应该适合你

DECLARE @f [real]
SET @f = 13.50

SELECT DATEADD(mi, (@f - FLOOR(@f)) * 60, DATEADD(hh, FLOOR(@f), CAST ('00:00:00' AS TIME)))
Run Code Online (Sandbox Code Playgroud)