我有一个varchar
列,值是42978.6736458333
,我想将其转换回正确的datetime
。我已经搜索了很多,并尝试了许多建议,但是似乎找不到适合我所拥有数据的建议。
当我对工作表中的所有字段进行CONCATENATE插入数据库时,我从excel中获得了此值; datetime列的输出看起来像“ 42978.6736458333”(该单元格最初包含“ 2017-08-31 16:10:03”)。我试过在excel中进行格式化和其他操作都无济于事。
以下是我尝试过的一些示例:
Select
convert(varchar(23), date, 112) DATE1,
convert(datetime, '20160805') DATE2,
convert(datetime, '2011-09-28 18:01:00', 120) DATE3,
dateadd(second, 42978.6736458333 * 24*24*60, '1899-12-31') DATE4
From
[dbo].[trainingLog]
结果:
对于每个结果。即使原始日期时间varchar
递增,DATE 2/3/4也不会计数。
例如,这里有更多varchar
值:
42981.5092361111
42982.7187615741
42983.8171527778
上述尝试返回一个值/日期,但是即使我的varchar值增加,它也是相同的日期。
我希望使用任何日期时间格式。我真的只想要任何格式的月/日/年。
答案 0 :(得分:0)
这看起来像一个Excel时间。所以:
select dateadd(minute, 42978.6736458333 * 24*60, '1899-12-31')
如果尝试使用秒,则会收到溢出错误。如果秒很重要,则可以执行以下操作:
select dateadd(day, floor(42978.6736458333), '1899-12-31') +
dateadd(second, (42978.6736458333 % 1)*24*60*60, 0)
答案 1 :(得分:0)
尝试
SELECT CAST(42978.6736458333 AS DATETIME)
返回
2017-09-02 16:10:03.000
但是,SQL Server使用01/01/1900作为纪元,而您的Excel使用30/12/1899或31/12/1899作为纪元,因此看起来您需要在转换后减去2天。
例如
SELECT dateadd(d, -2, CAST(42978.6736458333 AS DATETIME) )
返回
2017-08-31 16:10:03.000
根据您的评论,我不确定您如何从运行中获得价值
SELECT CAST(42981.5092361111 AS DATETIME)
为我归来
2017-09-05 12:13:18.000