Sql server 使用数据转换后,月份和日期位置互换

Sql server 使用数据转换后,月份和日期位置互换,sql-server,datetime,ssis,etl,data-conversion,Sql Server,Datetime,Ssis,Etl,Data Conversion,我正在尝试将.csv文件中的一些数据加载到我的SQL Server中。在.csv文件中有一个数据类型为Unicode(WSTR)的日期列,用于在SQL Server中存储该日期的列是Datetime数据类型 当我使用数据转换将WSTR数据转换为DBTIMESTAMP数据时,它发生了更改,但出现了一个错误,即它交换了月份和日期,这给了我错误的日期 日期应该是2019-09-03(2019年9月3日),但我得到2019-03-09 请说明我面临的问题是什么?问题 将字符串转换为日期值而不指定日期格式

我正在尝试将
.csv
文件中的一些数据加载到我的SQL Server中。在
.csv
文件中有一个数据类型为Unicode(WSTR)的日期列,用于在SQL Server中存储该日期的列是
Datetime
数据类型

当我使用数据转换将WSTR数据转换为DBTIMESTAMP数据时,它发生了更改,但出现了一个错误,即它交换了月份和日期,这给了我错误的日期

日期应该是2019-09-03(2019年9月3日),但我得到2019-03-09

请说明我面临的问题是什么?

问题 将字符串转换为日期值而不指定日期格式时,可能会发生这种情况。参考:

如果要将数据转换为日期或日期时间数据类型,则输出列中的日期为ISO格式,尽管区域设置首选项可能指定不同的格式

假设数据以以下日期格式存储在csv文件中
MM/dd/yyyy
,并且区域设置中的默认日期格式为
dd/MM/yyyy
,则日期值将无法正确转换

解决方案 要指定日期格式,必须使用脚本组件或派生列

派生列

您必须手动重新排序日期部分,您可以使用
TOKEN()
TOKENCOUNT()
函数来执行此操作,以下表达式将
dd/MM/yyyy
格式转换为
yyyy-MM-dd
通用格式:

TOKEN([DateColumn],"/",3) + "-" + RIGHT("0" + TOKEN([DateColumn],"/",2),2) + "-" +RIGHT("0" + TOKEN([DateColumn],"/",1),2) 
脚本组件

您可以使用
DateTime.ParseExact()
函数根据特定格式解析日期:

DateTime.ParseExact(Row.DateColumn,"MM/dd/yyyy",System.Globalization.CultureInfo.InvariantCulture");