Jika Anda mendapatkan kesalahan itu dari string seperti 13.5
lalu NLS_NUMERIC_CHARACTERS
sesi Anda tampaknya diatur untuk menggunakan koma sebagai pemisah desimal:
alter session set nls_numeric_characters=',.';
with your_table (bikou) as (
select '10' from dual
union all select '12' from dual
union all select '13.5' from dual
union all select null from dual
)
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', '')))
from your_table;
SQL Error: ORA-01722: invalid number
Anda dapat mengatur sesi secara eksplisit untuk menggunakan titik sebagai pemisah desimal, atau menyediakan format mask yang menggunakan titik:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999'))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
Atau gunakan penanda pemisah desimal dalam model dan ganti setelan NLS sesi:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''),
'99999999D99999', 'nls_numeric_characters=''.,'''))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
Topeng jelas harus cocok untuk semua nilai yang Anda harapkan dari regex Anda; apa yang saya gunakan mungkin tidak tepat untuk data Anda.
Masalah semacam ini adalah mengapa Anda tidak boleh menyimpan angka atau tanggal sebagai string. Gunakan tipe data yang benar untuk kolom Anda.