我有一个数据类型为varchar
的列。我想用NULL
替换所有非数字值。
例如,我的列可以包含值MIGB_MGW
,但也可以包含1352
。我与Derived Column Transformation Editor
使用的当前表达式是:
(DT_I4)kbup == (DT_I4)kbup ? 1 : 0
但当然这取代了我想要保留1
的所有值。我将用什么表达式来保存数值? (本例中为1352
)
答案 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)
答案 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)