将“42978.6736458333”varchar 转换为日期时间
Converting "42978.6736458333" varchar to datetime
我有一个值为 42978.6736458333
的 varchar
列,我想将其转换回正确的 datetime
。我进行了大量搜索并尝试了很多建议,但我似乎无法找到适合我所拥有数据的建议。
当我对 sheet 中的所有字段进行连接以插入到我的数据库时,我从 excel 获得了这个值;日期时间列的输出类似于“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]
结果:
- 日期 1 = 42978.6736458333
- 日期 2 = 2016-08-05 00:00:00.000
- 日期 3 = 2011-09-28 18:01:00.000
- 日期 4 = 1947-01-25 11:16:01.000
对于每一个结果。即使原始日期时间 varchar
递增,DATE 2/3/4 也不会计数。
例如,这里有更多 varchar
个值:
42981.5092361111
42982.7187615741
42983.8171527778
上面的尝试return一个value/date,但它是相同的日期,即使我的varchar值增加了。
我希望任何日期时间格式。我真的只想要任何格式的 month/day/year。
这看起来像 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)
尝试
SELECT CAST(42978.6736458333 AS DATETIME)
returns
2017-09-02 16:10:03.000
然而 SQL 服务器使用 01/01/1900 作为纪元,而你的 excel 使用 30/12/1899 或 31/12/1899 作为纪元所以看起来你需要施放后减去 2 天。
例如
SELECT dateadd(d, -2, CAST(42978.6736458333 AS DATETIME) )
returns
2017-08-31 16:10:03.000
根据你的评论,我不确定你是如何获得你的价值的 运行
SELECT CAST(42981.5092361111 AS DATETIME)
returns 对我来说
2017-09-05 12:13:18.000
我有一个值为 42978.6736458333
的 varchar
列,我想将其转换回正确的 datetime
。我进行了大量搜索并尝试了很多建议,但我似乎无法找到适合我所拥有数据的建议。
当我对 sheet 中的所有字段进行连接以插入到我的数据库时,我从 excel 获得了这个值;日期时间列的输出类似于“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]
结果:
- 日期 1 = 42978.6736458333
- 日期 2 = 2016-08-05 00:00:00.000
- 日期 3 = 2011-09-28 18:01:00.000
- 日期 4 = 1947-01-25 11:16:01.000
对于每一个结果。即使原始日期时间 varchar
递增,DATE 2/3/4 也不会计数。
例如,这里有更多 varchar
个值:
42981.5092361111
42982.7187615741
42983.8171527778
上面的尝试return一个value/date,但它是相同的日期,即使我的varchar值增加了。
我希望任何日期时间格式。我真的只想要任何格式的 month/day/year。
这看起来像 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)
尝试
SELECT CAST(42978.6736458333 AS DATETIME)
returns
2017-09-02 16:10:03.000
然而 SQL 服务器使用 01/01/1900 作为纪元,而你的 excel 使用 30/12/1899 或 31/12/1899 作为纪元所以看起来你需要施放后减去 2 天。
例如
SELECT dateadd(d, -2, CAST(42978.6736458333 AS DATETIME) )
returns
2017-08-31 16:10:03.000
根据你的评论,我不确定你是如何获得你的价值的 运行
SELECT CAST(42981.5092361111 AS DATETIME)
returns 对我来说
2017-09-05 12:13:18.000