SSIS - 将未格式化的字符串日期转换为 YYYY-MM-DD
SSIS - Converting unformatted strings dates to YYYY-MM-DD
我正在尝试将字符串列 [mydate]
转换为日期,我想使用 Derived Column Transformation
。问题是我的日期像 '1/10/2015'
、'1/1/2015'
、'11/1/2015'
和 '11/9/2015'
。所以格式可以在 D/MM/YYYY
、D/M/YYYY
、DD/M/YYYY
和 DD/MM/YYYY
之间变化。
你能指导我为 Derived Column Transformation
创建表达式吗?
我试过用这样的东西:
(DT_DATE)(ISNULL([mydate]) == FALSE ? (RIGHT([mydate],4) + "-" + "2" + "-" + LEFT([mydate],1)) : [mydate])
这项任务非常棘手,因为我们不仅要处理未格式化的字符串日期,而且它们也不属于区域中性 YYYY-MM-DD
格式。
要解决这个问题,我们可以对 Derived Column
使用以下表达式:
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
的格式,可以然后使用 Data Conversion
转换在 SSIS 中进行转换。这避免了处理 1/1/2000
和 10/10/2000
.
等日期长度变化的错误
派生列的输出名为 YYYYMMDD
,然后将该值传递到具有输出 Date Converted YYYYMMDD
的 Data Conversion
转换,如下所示。
Data Conversion
任务只是执行以下操作:
您可以使用替换来解决这个问题
替换(列名,“/”,“-”)
我正在尝试将字符串列 [mydate]
转换为日期,我想使用 Derived Column Transformation
。问题是我的日期像 '1/10/2015'
、'1/1/2015'
、'11/1/2015'
和 '11/9/2015'
。所以格式可以在 D/MM/YYYY
、D/M/YYYY
、DD/M/YYYY
和 DD/MM/YYYY
之间变化。
你能指导我为 Derived Column Transformation
创建表达式吗?
我试过用这样的东西:
(DT_DATE)(ISNULL([mydate]) == FALSE ? (RIGHT([mydate],4) + "-" + "2" + "-" + LEFT([mydate],1)) : [mydate])
这项任务非常棘手,因为我们不仅要处理未格式化的字符串日期,而且它们也不属于区域中性 YYYY-MM-DD
格式。
要解决这个问题,我们可以对 Derived Column
使用以下表达式:
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
的格式,可以然后使用 Data Conversion
转换在 SSIS 中进行转换。这避免了处理 1/1/2000
和 10/10/2000
.
派生列的输出名为 YYYYMMDD
,然后将该值传递到具有输出 Date Converted YYYYMMDD
的 Data Conversion
转换,如下所示。
Data Conversion
任务只是执行以下操作:
您可以使用替换来解决这个问题 替换(列名,“/”,“-”)