2016-11-10 90 views
1

在我的应用程序的时间信息都存储在数据库中的浮点型字段,其中:在0-1范围内转换浮点数时间

0 means 0 AM; 

0.5 12 AM 

0,999305555555556 is 11:59 PM 

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

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

+2

ERRM ....你不是一个谁知道如何将float转换为时间,因为你的应用程序已经在UI层完成它了吗? –

+1

检查UI组件代码? – Magnus

+0

我的应用程序自15年起“按原样”工作,这是我第一次需要用sql查询rime信息进行检索。到目前为止,将这个任务委托给UI层是很方便的。现场也有时做简单的块。我个人发现你的评论没有用。感谢您花时间阅读。 – LaBracca

回答

4

分钟有60秒,
小时有3600秒;
一天都有86400秒,

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

1)通过3600 total_seconds的分割地板将是您小时
2)减去小时* 3600从total_seconds
3)由60 total_seconds的分割地板将是您分钟
4)减去分钟* 60从total_seconds
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 
+0

非常感谢!更简单的版本是完美的工作正常! – LaBracca

相关问题