我正在将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文件中读取日期。
我正在使用导入导出向导。
答案 0 :(得分:1)
更新回答: OP在另一个回答评论中提及
我目前正在使用导入导出向导导入数据。
解决导出导出向导中的问题。
选择平面文件源 - 我使用了带有此数据的示例文件(sample.csv)
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)
答案 1 :(得分:0)
如果数据在Excel中设置为日期,则可以将其转换为nvarchar,然后按如下所示返回日期:
CONVERT(date, convert(nvarchar, [date from excel]), 110);
110最后意味着它将从格式mm-dd-yyyy转换,因为您的数据当前已在Excel格式化。
如果您从Excel中读取数据作为纯文本,那么将该文本转换为日期就足够了:
CONVERT(date, [date from excel], 110);
此功能会将数据转换为表格中的正确格式。