【发布时间】:2019-12-23 13:20:59
【问题描述】:
我有一个varchar 列,其值为42978.6736458333,我想将其转换回正确的datetime。我进行了相当多的搜索并尝试了许多建议,但我似乎找不到适用于我拥有的数据的建议。
当我对工作表中的所有字段进行连接以插入我的数据库时,我从 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]
结果:
- 日期 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
上述尝试返回一个值/日期,但它是相同的日期,即使我的 varchar 值增加了。
我期望任何日期时间格式。我真的只想要任何格式的月/日/年。
【问题讨论】:
-
你为什么将日期和时间存储为数字,首先存储为
varchar?这就像双重失礼。'42978.6736458333'甚至代表什么日期? -
这并不是 mu 真正的愿望。这就是它来自excel的方式。原始单元格包含“2017-08-31 16:10:03”。
-
我认为,您需要
deleteSQL 中插入的记录,并再次从 excel 中输入insert,然后在 excel 中进行连接之前,将列格式更改为 excel 中的文本,即20170831然后在 SQL 中很容易投射 -
@ShekarKola 我在连接之前确实这样做了;我尝试了文本和所有日期格式并得到了相同的结果。
-
@ShekarKola
datetime在小数点之前的零日期 (1900-01-01) 和小数点之后的天数为全天的一小部分。因此,float值可以转换为datetime。
标签: sql sql-server datetime varchar converters