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]' );
シンプルになりました。
コメント