gpt4 book ai didi

sql-server - 将小数时间转换为小时和分钟

转载 作者:行者123 更新时间:2023-12-02 11:03:12 27 4
gpt4 key购买 nike

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

我需要将 float 据类型的时间转换为小时和分钟。所以 13.50 为 13.30。 DB 中的数据类型与 float 一样固定,因此无法更改。数据库是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

但我收到错误消息“不允许从数据类型实数到时间的显式转换”已尝试使用as char而不是as float但查询挂起。

我做错了什么?我只是想将浮点值转换为小时和分钟。如果有人能指出我正确的方向,我将不胜感激。

最佳答案

你可以尝试:

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

输出:20:33:35

但请记住:在 MSSQL 中输入时间只能低于 24 小时

如果您想要超过 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)

输出: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);

输出:01:17:54

关于sql-server - 将小数时间转换为小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17788283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com