从Excel插入SQL DATETIME字段?

13

我遇到了一个相当奇怪的问题,我在Excel中有一个列(假设是列A),其中包含以下数据:

4/11/2015 10:14

我还有许多其他的列,但无论如何,在我的SQL插入语句中,当复制出来时,数据看起来像这样:

42105.4561921296

“='INSERT INTO TABLE VALUES('“&A1&”', Etc....)” 的数据格式为“通用”,而日期列的格式为“自定义”,其中包含M/DD/YYYY MM/HH类型。

SQL列的数据类型为DATETIME,因此它无法接受得到的奇怪数字。

有什么想法吗?更改“SQL INSERT”列的格式不会改变结果。


首先尝试将两种数据格式都设置为文本,看看SQL是否会为您执行隐式日期时间转换。 - Eric Hauenstein
2
不幸的是,将实际日期/时间列设置为文本会产生上述丑陋的数字。但我还是尝试了一下,但没有成功 :/ - user475353
如果您尝试将Excel日期列的格式更改为日期/时间,会发生什么? - Tab Alleman
2个回答

22

你是正确的 - Excel 格式仅改变数字显示的方式,而不是单元格的基础值。在这种情况下,单元格的值是一个 Excel 日期时间值,它表示自 1900 年 1 月 1 日起的天数,带有时间的小数部分。

我建议使用 Excel 的 TEXT 函数将 Excel 数字日期时间值转换为可插入 SQL 的文本字符串:

而不是:

INSERT INTO TABLE VALUES ('"&A1&"', Etc....)"

尝试:

INSERT INTO TABLE VALUES ('"&TEXT(A1,"YYYY-MM-DD HH:MM")&"', Etc...)"

请注意,text函数的第二个参数中的代码(在双引号内)与您计算机的系统区域设置相关联。如果上述内容不起作用,请检查相应单元格的数字格式是否适合您的变体。 - robotik

4

将日期和时间以YYYY-MM-DD Minute:Second或2015-04-15 12:52的形式呈现,是将日期时间插入datetime列的最佳格式。

因此,要从Excel中插入日期时间,您可以使用以下一组Excel函数:(其中A1包含要保存的日期时间)

=YEAR(A1)&"-"&RIGHT("00"&MONTH(A1),2)&"-"&RIGHT("00"&DAY(A1),2)&" "&RIGHT("00"&HOUR(A1),2)&":"&RIGHT("00"&MINUTE(A1),2)&":"&RIGHT("00"&SECOND(A1),2)

你错过了小时,加上单个数字应该包含前导零。我正在相应地修改你的答案。 - robotik
创建表 #x1 (d1 datetime) 插入数据到 #x1 ('2015-04-15 12:52') 查询 #x1 返回结果:2015-04-15 12:52:00.000 - benjamin moskovits
这是与秒省略的小时和分钟,而不是省略小时的分钟和秒。 - robotik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接