Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tidak bisa SUM(TO_NUMBER(varchar2) :ORA 01722 [ORACLE]

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara Flashback ketika kita memiliki dataguard

  2. Buat formulir Apex dengan banyak halaman

  3. Oracle:Panggil prosedur tersimpan di dalam paket

  4. Terapkan batasan kunci asing ke kolom tabel yang sama

  5. Hibernate Jpa - pengecualian pelanggaran batasan pada Kunci Utama (Urutan)