使用正确的格式转换将excel中的日期数据导入表中

时间:2018-06-05 10:39:25

标签: sql sql-server excel date

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

请让我知道在SQL中正确导入它的方法。 我很乐意以两种方式导入:yyyy-mm-dd或yyyy-dd-mm。我只是想让它正确地从excel文件中读取日期。

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

2 个答案:

答案 0 :(得分:1)

更新回答: OP在另一个回答评论中提及

  

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

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

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

    id,日期,文字 1,08-09-2018, “样品” 2,05-09-2019,“更多样本” Choose data step- advanced tab

  2. 在“选择您的数据源”下,我转到“高级”标签,确保将日期作为字符串导入。 enter image description here
  3. 在“选择源表和视图”步骤中,转到“编辑映射”>“编辑SQL”,然后将表创建查询更改为具有额外计算列(例如cdates),其定义类似于[cdates] as convert(date,[ dates],110)。正如您所看到的,我在我的SQL中将其添加为定义中的最后一列。
  4. 如果您不创建表但插入现有表。更改表以在varchar日期列上包含计算列。

    查看我得到的输出 enter image description here

    原始答案: 您应该将日期作为nvarchar(10)导入到表中,然后在导入它们之后将其强制转换。

    通常,nvarchar类型结构用于所有目的,也称为登台表。在临时表中,大多数相关的不信任数据字段都是nvarchar(N)类型,允许它们成功导入SQL服务器。

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

    在你的情况下,你应该使用像

    这样的显式转换
    CONVERT(date,your_staging_date_column ,110)
    

答案 1 :(得分:0)

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

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

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

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

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

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