Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS-将未格式化的字符串日期转换为YYYY-MM-DD_Sql Server_Date_Ssis - Fatal编程技术网

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导入屏幕截图,当我按照你的建议导入时,我的系统在不同的位置交换月份和日期,可能是因为我的服务器区域设置,这就是我尝试执行派生列转换的原因