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
我每个月都会收到一个文件名 "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