Corredor

ウェブ、プログラミングの勉強メモ。

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 扱いになる

ということ。

プロとしてのSQLリファレンス (Oracle現場主義)

プロとしてのSQLリファレンス (Oracle現場主義)