SSIS 派生列 - 从文件名检索日期的表达式

SSIS Derived Column - expression to retrieve date from Filename

我每个月都会收到一个文件名 "Asia Marine Workbook - Oct 2017.xlsx"。我需要使用派生列 'month' 和 'year' 创建两列,它们应该从文件名中输出为整数,如 09 和 2017..

任何建议或想法都会很棒!提前致谢!

以下表达式将为您找到所需的内容。

字符串:

SUBSTRING([ColumnName], 28, 4)

整数:

(DT_I4) SUBSTRING([ColumnName], 28, 4)

月份

字符串:

RIGHT("0" + (DT_WSTR, 2) MONTH((DT_DATE) ("1 " + SUBSTRING([ColumnName], 24, 3) + " 2017")), 2)

整数:

MONTH((DT_DATE) ("1 " + SUBSTRING([ColumnName], 24, 3) + " 2017"))

注意:“09”不是整数,必须是string

假设@[User::FilePath]是一个包含以下值的变量Asia Marine Workbook - Oct 2017.xlsx

1.要获取年份值,您可以使用以下表达式

(DT_I4)LEFT(RIGHT(@[User::FilePath],9),4)

结果

2017

2。要获取月份字符串值,您可以使用以下

LEFT(RIGHT(@[User::FilePath],13),3)

结果

Oct

3。获取整数值中的月份

(DT_I4)(UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "JAN" ? "01" :
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "FEB" ? "02" : 
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "MAR" ? "03" :
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "APR" ? "04" :
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "MAY" ? "05" : 
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "JUN" ? "06" :
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "JUL" ? "07" :
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "AUG" ? "08" :
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "SEP" ? "09" : 
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "OCT" ? "10" : 
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "NOV" ? "11" : 
UPPER(LEFT(RIGHT(@[User::FilePath],13),3)) == "DEC"? "12":"")

结果

10

或将日期与日期值连接起来并将其转换为 (DT_DATE) 然后提取月份值

MONTH((DT_DATE)"1 " + LEFT(RIGHT(@[User::FilePath],13),8))

结果

10

此外,如果您需要 return 将其作为 2 位数字的字符串(即 01)

RIGHT("0" + (DT_WSTR,10)MONTH((DT_DATE)"1 " + LEFT(RIGHT(@[User::FilePath],13),8)),2)

结果

10