CONVERT(DATETIME,FLOAT)如何工作?

时间:2013-12-09 03:31:58

标签: sql sql-server datetime

所以我有一个浮点 41617.063633 ,我想知道它是如何从DATETIME制作的。 我已经计算出浮点的左侧(自 12/30/1899 以来的天数)。

但我被困在右侧。我假设它是秒数或者其他东西,但无论我从DATETIME字符串的时间部分尝试什么,我都无法得到正确的一面( 063633 )。

以下是获取左侧的SQL:

DECLARE @targetDate DATETIME = '12/9/2013 12:31:37';
DECLARE @floor DATETIME = '12/30/1899 0:00:00'
DECLARE @gmt TIME = '11:00:00';
DECLARE @left VARCHAR (8) = DATEDIFF(DAY, @floor , CONVERT (DATE, @targetDate));
DECLARE @right VARCHAR (8) = '0';
SELECT @left + '.' + @right AS [FloatingTime]

我知道我可以使用下一部分SQL来为我解决这个问题:

SELECT CONVERT (DATETIME, 41617.063633)

但是既然我已经非常接近搞清楚这一点,有人可以让我超过这条线吗?

您知道如何计算浮点的右侧(字符串的时间部分)吗?

4 个答案:

答案 0 :(得分:1)

你对整数部分(十进制左边的部分)的含义是正确的。小数部分(小数点右侧的部分)表示24小时周期的一部分。

Decimal value    Time Value    Calculation 
=============    ==========    ===========
0.00094444444    12:01:00 AM   1.0 / 24 / 60 (1 day/24 hours/60 minutes per hour)
0.01041666666    12:15:00 AM   1.0 / 24 / 60 * 15
0.02083333333    12:30:00 AM   1.0 / 24 / 60 * 30
0.04166666666    01:00:00 AM   1.0 / 24

答案 1 :(得分:0)

这一切都取决于日期时间的类型。 SQL Server 2012中目前有6个不同的版本。

http://msdn.microsoft.com/en-us/library/ff848733.aspx

至于日期时间,该值应解释为两个32位整数。

自19/1年1月1日以来的天数以及自午夜以来的时间。精确到.000,.003或.007秒或3毫秒的增量。我会检查一下,但它可能是从午夜起3毫秒的计数。

同样,您需要真正了解生成日期的内容,以准确解码十六进制/数字。

答案 2 :(得分:0)

正如@ ken-white所说,小数是24小时工作日的一小部分。因此,为了得到时间,将浮点数的小数部分乘以24得到时间:

.063633 * 24 = 1.527 = 1:31.6 am

答案 3 :(得分:0)

它与一天中的分钟数相乘: 一天1440分钟。

1140 * .063633 = 91.63152

这是1小时31分37秒。

您的示例,转换为日期时间: SQL Fiddle

出现如下:

December, 11 2013 01:31:37+0000