Sql server SSIS-将未格式化的字符串日期转换为YYYY-MM-DD
我正在尝试将字符串列Sql server SSIS-将未格式化的字符串日期转换为YYYY-MM-DD,sql-server,date,ssis,Sql Server,Date,Ssis,我正在尝试将字符串列[mydate]转换为日期,并且我想使用派生列转换。问题是我的日期像是'1/10/2015','1/1/2015','11/1/2015'和'11/9/2015'。因此,格式可以在D/MM/YYYY、D/M/YYYY、DD/M/YYYY和DD/MM/YYYY之间更改 您能否指导我创建派生列转换的表达式 我试着用这样的方法: (DT_DATE)(ISNULL([mydate]) == FALSE ? (RIGHT([mydate],4) + "-" + "2" + "-"
[mydate]
转换为日期,并且我想使用派生列转换
。问题是我的日期像是'1/10/2015'
,'1/1/2015'
,'11/1/2015'
和'11/9/2015'
。因此,格式可以在D/MM/YYYY
、D/M/YYYY
、DD/M/YYYY
和DD/MM/YYYY
之间更改
您能否指导我创建派生列转换的表达式
我试着用这样的方法:
(DT_DATE)(ISNULL([mydate]) == FALSE ? (RIGHT([mydate],4) + "-" + "2" + "-" + LEFT([mydate],1)) : [mydate])
这项任务相当棘手,因为我们不仅要处理未格式化的字符串日期,而且它们也不是netural
YYYY-MM-DD
格式
要解决此问题,我们可以对派生列使用以下表达式:
RIGHT([mydate],4) + "/" + SUBSTRING([mydate],FINDSTRING([mydate],"/",1) + 1,FINDSTRING([mydate],"/",2) - FINDSTRING([mydate],"/",1) - 1) + "/" + SUBSTRING([mydate],1,FINDSTRING([mydate],"/",1) - 1)
表达式相当长,但它所做的是在正斜杠之间取值(月、日、年)/
并将它们连接成类似于YYYY/MM/DD
的格式,然后可以在SSIS中使用数据转换
转换。这避免了处理日期长度变化的错误,如1/1/2000
和10/10/2000
派生列的输出被命名为YYYYMMDD
,然后该值被传递到数据转换
转换中,该转换的输出为日期转换的YYYYMMDD
,如下所示
数据转换任务只需执行以下操作:
更改平面文件源中的字段类型,而不是尝试在以后转换它。可以指定特定字段是具有特定格式的日期。顺便说一句,日期没有格式,它们是二进制值。如果要使用它们并将其存储为日期,则不需要将它们转换为yyyy-MM-dd
。我最初尝试一下,但这里的问题是SQL会像2015-10-30这样保存日期。什么问题?如果你不解释问题的实质是什么,那就帮不上忙了。@PanagiotisKanavos SQL导入屏幕截图,当我按照你的建议导入时,我的系统在不同的位置交换月份和日期,可能是因为我的服务器区域设置,这就是我尝试执行派生列转换的原因