Oracle DB で数値のみのフィールドかどうかを判定する
Oracle DB で、対象のフィールドの内容が数値のみかどうかを判定する。
例えば、users.user_code には
08114といった数値のみのユーザコードz916294といった数値以外の文字列を含むユーザコード
が混在していて、これらを区別したいとする。
以下のように CASE 文でうまく判定すると、対象のフィールドデータが数値のみかどうかが分かる。
SELECT
user_code,
CASE
WHEN TRIM(TRANSLATE(user_code, '0123456789', ' ')) IS NULL
THEN '数値のみ'
ELSE '文字列アリ'
END AS test
FROM
users;
TRANSLATE()で指定の文字列を置換できる。- 数値を全て空白に置換し、それを
TRIM()した結果がNULLなら、そのカラムの値は数値のみと分かる。 TRANSLATE()の第2引数と第3引数は文字の数を合わせておく。第3引数の文字数の方が少ない場合は、その文字はNULL扱いになる
ということ。