【SSIS】SSISの派生列で数値判定

使うデータはこんな感じで。CSVで。

hoge,fuga,piyo
2,2,3
c,3,4
1,3,5

派生列の式

ちょっとアクロバティックですが、こんな感じのexpressionを書いてあげます。派生列名は「isNumeric」とでもしてあげますか。

(DT_I4)hoge == (DT_I4)hoge

当然このままだと文字列が来たときに変換エラーで落ちるので、エラー出力の構成から「エラーを無視する」を設定してあげましょう。

条件分岐の式

これでhogeが数値の場合はisNumericにtrueが、文字列の場合にはnullが入ります。nullかtrueで判断すると言うクソ感溢れた方法です。

!ISNULL(isNumeric) && isNumeric

ちなみにISNULL関数がないと落ちます。これ本当に不便だと思うんですけど、どうなんでしょう。

兎にも角にもこれで数値を抽出することが出来ました。

数値とNULLを抽出する

データがこんな風になっていた場合、NULLも抽出対象にしたくなることも、まぁあります。

hoge,fuga,piyo
2,2,3
c,3,4
,3,5

要は「NULLの時はisNumericにtrueを渡す」と考えればいいので、派生列のexpressionをちょっと書き換えてあげましょう。

ISNULL(hoge) || (DT_I4)hoge == (DT_I4)hoge

これでOKです。

まとめ

1項目ならともかく、何項目もこれをやりたいと考えると、目に見える地雷を踏むようなものなので、やっぱりスクリプトコンポーネントでいいと思います。