2017-07-07 194 views
2

我试图将数据从平面文件转换为SQL日期。我使用变量来分隔月份,日期和年份,并在需要时添加必要的“0”,然后将它们连接在一起。这个工作正常工作,除非我遇到一个空白的日期,并且会抛出三个错误:“长度-1对于函数”SUBSTRING“无效。长度参数不能为负。将长度参数更改为零或a正值“,”评估函数“SUBSTRING”失败,错误代码为0xC004708B“,以及”评估函数“LEN”失败,错误代码为0xC00470C5。“。我有一个变量的日期1995年1月2日找到“/”使用ŸFINDSTRING(@[User::Scan_Date] , "/", 1)长度-1对于“SUBSTRING”功能无效。 SSIS中的长度参数不能为负数

,然后我有一个月的例子是

@[User::Y] < 1 ? (DT_STR, 2, 1252) NULL(DT_STR, 2, 1252) : (LEN(SUBSTRING(@[User::Scan_Date] , 1, @[User::Y] -1)) < 2 ? "0" + SUBSTRING(@[User::Scan_Date] , 1, @[User::Y] -1) : SUBSTRING(@[User::Scan_Date] , 1, @[User::Y] -1)) 

正如我所说的,表达式工作正常,如果有日期,但如果它是空白的,那么我收到一个错误。

回答

0

IIF包装整个表达式,检查日期是否为空。

0

您必须检查@[User::Scan_Date]是否为空使用ISNULL()函数,如果它为空,您可以返回一个空字符串或NULL值,否则计算您的表达式。

ISNULL(@[User::Scan_Date]) ? "" : 
(@[User::Y] < 1 ? (DT_STR, 2, 1252) NULL(DT_STR, 2, 1252) : (LEN(SUBSTRING(@[User::Scan_Date] , 1, @[User::Y] -1)) < 2 ? "0" + SUBSTRING(@[User::Scan_Date] , 1, @[User::Y] -1) : SUBSTRING(@[User::Scan_Date] , 1, @[User::Y] -1)))