Oracleでは、数値かどうかをどのように判断しますか?
Oracleでは、REGEXP_LIKE関数を使用して、フィールドが数値かどうかを判断できます。数字のパターンを照合するために正規表現を使用できます。
例として、以下のクエリはフィールドが数値かどうかをブーリアン値(1は数値、0は数値でない)として返します。
SELECT
CASE
WHEN REGEXP_LIKE(column_name, '^[0-9]+$') THEN 1
ELSE 0
END AS is_number
FROM
table_name;
ここでいうcolumn_nameは判定を行うカラム名、table_nameは検索するテーブル名です。正規表現^[0-9]+$は、1つ以上の数字とマッチします。
また、TO_NUMBER関数を使用してフィールドの数字変換を試行し、変換に成功した場合、フィールドは数値であると判断され、そうでなければ例外が発生します。例を以下に示します。
SELECT
column_name,
CASE
WHEN TO_NUMBER(column_name) IS NOT NULL THEN 1
ELSE 0
END AS is_number
FROM
table_name;
ここでいうcolumn_nameとは判断する対象のカラム名、table_nameとは対象のテーブル名のこと。もし、TO_NUMBER関数がカラムを数値に変換できた場合は、カラムは数値と見做され、1が返されます。できなかった場合は0が返されます。