将字符串转换为 Int SSIS
Convert String to Int SSIS
我有一个 string
的原始源和目标 table 它是十进制 (5,2),我尝试用规则更改它
但是当我运行任务时总是失败,谁能帮我看看哪里出了问题?
更新
我也试了(DT_DECIMAL,2)TRIM(NAME1)
但是还是失败了
尝试结合使用 DECIMAL 和 FLOAT。我对此进行了测试并且成功了。
(DT_DECIMAL,2)(DT_R4)TRIM(NAME1)
这首先转换为浮点数,然后转换为小数。
任务失败可能是某些值无法转换(包含非数值)
在数据转换组件中,您可以将错误输出设置为 Ignore failure
,然后如果 NAME1
无法转换为 DT_I8
,则新列值将为 NULL
您可以在这篇有用的博客文章中阅读更多内容:
另一种解决方法
您可以使用 script Component
而不是 Derived Column
来实现此目的
只需添加一个脚本组件,添加一个类型为 DT_I8
的输出列(假设其名称为 OutColumn
)并将 NAME1
列标记为输入。
在脚本 window 中编写以下脚本(使用 Vb.Net):
Public Class ScriptMain
Inherits UserComponent
Public Overrides Sub InputBuffer0_ProcessInputRow(ByVal Row As InputBuffer0)
Dim intValue as Int64
If Not Row.NAME1_ISNULL AndAlso
Not String.iSnullOrEmpty(Row.NAME1.Trim) AndAlso
Int64.TryParse(Row.NAME1.Trim, intValue) Then
Row.OutColumn = intValue
Else
Row.OutColumn_IsNull = True
End If
End Sub
End Class
我有一个 string
的原始源和目标 table 它是十进制 (5,2),我尝试用规则更改它
但是当我运行任务时总是失败,谁能帮我看看哪里出了问题?
更新
我也试了(DT_DECIMAL,2)TRIM(NAME1)
但是还是失败了
尝试结合使用 DECIMAL 和 FLOAT。我对此进行了测试并且成功了。
(DT_DECIMAL,2)(DT_R4)TRIM(NAME1)
这首先转换为浮点数,然后转换为小数。
任务失败可能是某些值无法转换(包含非数值)
在数据转换组件中,您可以将错误输出设置为 Ignore failure
,然后如果 NAME1
无法转换为 DT_I8
,则新列值将为 NULL
您可以在这篇有用的博客文章中阅读更多内容:
另一种解决方法
您可以使用 script Component
而不是 Derived Column
只需添加一个脚本组件,添加一个类型为 DT_I8
的输出列(假设其名称为 OutColumn
)并将 NAME1
列标记为输入。
在脚本 window 中编写以下脚本(使用 Vb.Net):
Public Class ScriptMain
Inherits UserComponent
Public Overrides Sub InputBuffer0_ProcessInputRow(ByVal Row As InputBuffer0)
Dim intValue as Int64
If Not Row.NAME1_ISNULL AndAlso
Not String.iSnullOrEmpty(Row.NAME1.Trim) AndAlso
Int64.TryParse(Row.NAME1.Trim, intValue) Then
Row.OutColumn = intValue
Else
Row.OutColumn_IsNull = True
End If
End Sub
End Class