2013-09-24 41 views
0

应用unpivot过程后,我的金额列中有空格和其他字符(如“ - ”)。我想将这些非数字值转换为零。我使用替换程序,但它只在当时转换。 另外,我试着用下面的脚本SSIS将空白或其他值转换为零

/**

Public Overrides Sub Input()_ProcessInputRows(ByVal Row As Input()Buffer) 
    If Row.ColumnName_IsNull = False Or Row.ColumnName = "" Then 
      Dim pattern As String = String.Empty 
      Dim r As Regex = Nothing 
      pattern = "[^0-9]" 
      r = New Regex(pattern, RegexOptions.Compiled) 
      Row.ColumnName = Regex.Replace(Row.ColumnName, pattern, "") 
     End If 
End Sub 

**/

,但我发现error.I没有太多关于剧本,所以也许我放在错误的地方。底线是我需要转换那些非数字值。

非常感谢您的帮助。

回答

1

我通常将正则表达式视为将另一个问题引入现有问题的好方法。

我所做的模拟你的问题是编写一个添加5行的select语句。 2有效数字,其余是一个空字符串,字符串与空格和一个连字符。

enter image description here

我然后有线它到脚本部件,并设置列作为读/写

enter image description here

我使用的脚本如下。我验证了那里有一个值,如果是这样,我试图将该值转换为整数。如果失败了,那么我将它赋值为零。 VB不是我的强项,所以如果这可以做得更优雅,请编辑我的脚本。

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
    ' Ensure we have data to work with 
    If Not Row.ColumnName_IsNull Then 
     ' Test whether it's a number or not 
     ' TryCast doesn't work with value types so I'm going the lazy route 
     Try 
      ' Cast to an integer and then back to string because 
      ' my vb is weak 
      Row.ColumnName = CStr(CType(Row.ColumnName, Integer)) 
     Catch ex As Exception 
      Row.ColumnName = 0 
     End Try 

    End If 

End Sub