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