【问题标题】:Check if column value is Numeric. SSIS检查列值是否为数字。 SSIS
【发布时间】:2017-02-13 16:17:00
【问题描述】:

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

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

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

但这当然会用1 替换我想要保留的所有值。我将使用什么表达式来保留数值? (本例中为1352

【问题讨论】:

  • case when isnumeric(dt_i4) then dt_I4 else null end

标签: sql sql-server visual-studio ssis


【解决方案1】:

如果你想要varchar 类型的null,你可以使用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)

【讨论】:

  • 别忘了将错误输出设置为Ignore failure
【解决方案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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      另一个选项如果 2012+ 是 Try_Convert()

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

      返回

      NULL
      26000000
      NULL
      1352
      

      【讨论】:

      • 严重反对选民?这个答案是 32 个月前的,完全有效。
      猜你喜欢
      • 1970-01-01
      • 2011-06-28
      • 2013-01-06
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      相关资源
      最近更新 更多