将 0-1 范围内的浮点数转换为时间

LaB*_*cca 1 t-sql sql-server

在我的应用程序中,时间信息存储在浮点字段中的 db 中,其中:

0 means 0 AM;

0.5 12 AM 

0,999305555555556 is 11:59 PM
Run Code Online (Sandbox Code Playgroud)

转换为时间信息目前在我的应用程序中由 Ui 组件完成,这些组件旨在使用这种方式将时间信息保存为浮点数(这是在 SQL Server 2008R2 中引入 TIME 数据类型之前决定的)。

我的问题是:
如何执行这种转换?

use*_*582 6

分钟有 60 秒,
小时有 3600 秒,
天有 86400 秒,

将您的 (0-1) 浮点数乘以 86400(我们称之为 total_seconds),

1) total_seconds 除以 3600 的底数就是你的小时数
2) 从你的 total_seconds 中减去 hours*3600
3) total_seconds 除以 60 的底数就是你的分钟
4) 从你的 total_seconds 中减去 mins*60
6) 剩下的是什么你的秒

DECLARE @raw_input FLOAT = 0.999305555555556
DECLARE @total_seconds INT
DECLARE @hours INT, @minutes INT, @seconds INT

SET @total_seconds = @raw_input * 86400
SET @hours = FLOOR(@total_seconds/3600)
SET @total_seconds = @total_seconds - @hours * 3600
SET @minutes = FLOOR(@total_seconds/60)
SET @seconds = @total_seconds - @minutes * 60
Run Code Online (Sandbox Code Playgroud)

编辑:或者更简单,改编一个类似的问题/答案

DECLARE @raw_input FLOAT = 0.999305555555556
DECLARE @secondss decimal = @raw_input*86400
SELECT  CAST(CONVERT(VARCHAR,DATEADD(SECOND, @secondss, 0),108) AS TIME)

>23:59:00.0000000
Run Code Online (Sandbox Code Playgroud)