【问题标题】:Importing date data from excel into table with right format conversion通过正确的格式转换将日期数据从 excel 导入表格
【发布时间】:2018-06-05 10:39:24
【问题描述】:

我正在将数据从 excel 文件导入 SQL Server 数据库。在 excel 中,日期字段的格式为 mm-dd-yyyy。而 SQL 数据库将其导入为 yyyy-mm-dd,将日期交换为月份。例如。在 excel 中它的 01-12-2018 但在 SQL 中它导入为 2018-12-01。因此日期不正确。

请告诉我一种在 SQL 中正确导入它的方法。 我很高兴以两种方式导入:yyyy-mm-dd 或 yyyy-dd-mm。我只是想让它从 excel 文件中正确读取日期。

我正在使用导入导出向导。

【问题讨论】:

  • 一种解决方案可能是在 excel 中正确格式化单元格,选择(例如)yyyy-MM-dd 格式。出于一般目的:规范化您的数据,然后将它们导入关系数据库
  • SQL 和 Excel 中的字段是否都格式化为日期?
  • 因此日期不正确。 - 如果日期遵循所需的格式,则它们是正确的。还是我错过了什么?
  • 日期没有固有格式。您的 Excel 值实际上是字符串而不是日期值吗?
  • 您是如何导入它们的,您要导入的文件的扩展名是什么?

标签: sql sql-server excel date


【解决方案1】:

更新答案: OP在另一个答案评论中提到

我目前正在使用导入导出向导导入数据。

解决导入导出向导中的问题。

  1. 选择平面文件源 - 我使用了包含此数据的示例文件 (sample.csv)

    id、日期、文本 1,08-09-2018,“样品” 2,05-09-2019,“更多样品”

  2. 在“选择您的数据源”下,我转到“高级”选项卡并确保将日期作为字符串导入。
  3. 在“选择源表和视图”步骤中,进入“编辑映射”>“编辑 SQL”,然后将表创建查询更改为具有额外的计算列(例如 cdates),其定义类似于 [cdates] as convert(date,[ dates],110)。如您所见,我在 SQL 中将其添加为定义中的最后一列。

如果您不创建表但插入到现有表中。更改表格以在 varchar 日期列上添加一个计算列。

查看我得到的输出

原答案: 您应该将日期作为 nvarchar(10) 导入表中,然后在导入后进行转换。

通常都遵循 nvarchar 类型结构,也称为临时表。在暂存表中,大多数相关的不信任数据字段都是 nvarchar(N) 类型,从而可以成功地将它们导入 SQL 服务器。

导入后,您应该使用 MERGE 或 UP-SERT 查询中正确转换/转换的列将暂存表中的数据放入所需的表中。

在你的情况下,你应该使用像这样的显式转换

CONVERT(date,your_staging_date_column ,110)

【讨论】:

  • 这听起来是个很糟糕的主意,这些值应该以正确的格式开始(即在 Excel 中作为实际日期)或在导入时进行转换。把价值观放到别处是浪费资源。
  • @DavidG 这是很常见的事情,在 ETL 过程中很有用。 [en.wikipedia.org/wiki/Staging_(data)]
  • 我很清楚什么是暂存数据,我是说对于如此简单的转换完全是浪费时间。
  • @DavidG 好吧,如果 OP 在 excel 中有工作要做并且仍然没有得到结果,最好至少暂存一次并直接进行转换,然后从下一次完全跳过暂存
  • @DavidG 我在一定程度上认为 OP 有坏数据,列中同时存在 mm-dd 和 dd-mm 数据。
【解决方案2】:

如果数据在Excel中设置为Date,可以将其转换为nvarchar,然后返回日期如下:

CONVERT(date, convert(nvarchar, [date from excel]), 110);

最后的 110 意味着它将从格式 mm-dd-yyyy 转换为您的数据当前在 Excel 中格式化。

如果您以纯文本形式从 Excel 中读取数据,那么将该文本转换为日期就足够了:

CONVERT(date, [date from excel], 110);

此函数会将数据转换为表格中的正确格式。

【讨论】:

  • 你的意思是我在将数据导入 sql 表后应用这些转换?
  • 在导入步骤中应用转换。只是在使用这个日期字段时,而不是仅仅为字段中的内容设置值,调用上面的转换
  • 我目前正在使用导入导出向导导入数据。请问哪里可以用这个?
猜你喜欢
  • 1970-01-01
  • 2019-07-11
  • 2017-08-31
  • 2016-03-08
相关资源
最近更新 更多