2017-02-13 70 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