所以我有一个浮点 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)
但是既然我已经非常接近搞清楚这一点,有人可以让我超过这条线吗?
您知道如何计算浮点的右侧(字符串的时间部分)吗?
答案 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