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

时间:2016-11-10 08:59:45

标签: sql-server tsql

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

0 means 0 AM;

0.5 12 AM 

0,999305555555556 is 11:59 PM

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

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

1 个答案:

答案 0 :(得分:4)

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

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

1)total_seconds除以3600的分区将是你的小时
2)从你的total_seconds减去小时* 3600 3)total_seconds除以60的分层将是你的分钟
4)从你的total_seconds减去分钟* 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

编辑:或更简单,适应类似的question/answer

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