2017-02-13 68 views
0

我有一个数据类型为varchar的列。我想用NULL替换所有非数字值。检查列值是否为Numeric。 SSIS

因此,例如我的专栏可以包含值MIGB_MGW,但也1352。我与Derived Column Transformation Editor使用当前的表达式为:

(DT_I4)kbup == (DT_I4)kbup ? 1 : 0 

但当然这个替换所有我想保持与1值。我会用什么表达来保持数值? (1352在这个例子中)

+0

'case when whennumeric(dt_i4)then dt_I4 else null end' – xQbert

回答

1

如果你想nullvarchar的类型,你可以使用NULL(DT_STR)。对于DT_I4可以使用NULL(DT_I4)

然后,您可以在场所使用(DT_I4)kbup0的恢复要保持原有的varchar值,转换为DT_I4

(DT_I4)kbup == (DT_I4)kbup ? (DT_I4)kbup : NULL(DT_I4) 
2

使用NOT LIKE

SELECT CASE 
     WHEN col NOT LIKE '%[^0-9]%' THEN col 
     ELSE NULL 
     END as Only_Numeric 
FROM (VALUES ('MIGB_MGW'), 
       ('1352')) tc(col) 

结果:

Only_Numeric 
------------ 
NULL 
1352 
2

另一种选择,如果2012+是Try_Convert()

SELECT Try_Convert(float,col) 
FROM (VALUES ('MIGB_MGW'), 
       ('2.6e7'), 
       ('2.6BMW'), 
       ('1352')) tc(col) 

返回

NULL 
26000000 
NULL 
1352 
2

您可以将它们转换为派生列,然后在错误输出中使用忽略失败选项。 enter image description here