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
扱いになる
ということ。