oracleで数字と文字が混在しているときに、数字だけ使いたい(ORA-01722の解消)

はい、データの持ち方が雑。
しかもデータのぶつけ先が数値(number型)のときに割と困ります。

to_numberしてぶつけているのですが、案の定数値にならない文字が入っていました。

select dat
, to_number(dat)
from (
select '1' as dat from dual
union
select 'a' as dat from dual
)

ORA-01722: 数値が無効です。

ただ、調べてみるとoracleではis_numberみたいなものは見つからず、
PL/SQLで頑張れみたいな記事が出てきます(それも古い記事だったのですが)。


今回は「データが数値にならないなら無視してよい」という
条件だったため、regexp_likeで解決しました。


select dat
, to_number(dat)
from (
select '1' as dat from dual
union
select 'a' as dat from dual
)
where regexp_like(dat, '[0-9]' );


シンプルになりました。