检查列值是否为数字。 SSIS

时间:2017-02-13 16:17:00

标签: sql sql-server visual-studio ssis

我有一个数据类型为varchar的列。我想用NULL替换所有非数字值。

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

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

但当然这取代了我想要保留1的所有值。我将用什么表达式来保存数值? (本例中为1352

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 :(得分:2)

您可以使用派生列转换它们,然后使用Error输出中的ignore failure选项。  enter image description here

答案 3 :(得分:1)

如果您想要null varchar类型,则可以使用NULL(DT_STR)。对于DT_I4,您可以使用NULL(DT_I4)

然后,您可以使用(DT_I4)kbup代替1来返回您要保留的原始varchar值,转换为DT_I4

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