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

Pengaturan NLS_NUMERIC_CHARACTERS untuk desimal

Anda dapat melihat setelan sesi Anda saat ini dengan menanyakan nls_session_parameters :

select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';

VALUE                                  
----------------------------------------
.,                                       

Itu mungkin berbeda dari default database, yang dapat Anda lihat di nls_database_parameters .

Dalam sesi ini kesalahan kueri Anda:

select to_number('100,12') from dual;

Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 -  "invalid number"

Saya dapat mengubah sesi saya, baik secara langsung dengan alter session atau dengan memastikan klien saya dikonfigurasi dengan cara yang mengarah ke pengaturan yang dibutuhkan string (mungkin diwarisi dari sistem operasi atau lokal Java, misalnya):

alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;

TO_NUMBER('100,12')
-------------------
             100,12 

Di SQL Developer, Anda dapat menyetel nilai pilihan Anda di Tool->Preferences->Database->NLS.

Tetapi saya juga dapat mengganti pengaturan sesi itu sebagai bagian dari kueri, dengan opsi nlsparam ketiga opsional parameter ke to_number(); meskipun itu membuat pilihan kedua fmt parameter yang diperlukan juga, jadi Anda harus dapat memilih format yang sesuai:

alter session set NLS_NUMERIC_CHARACTERS = '.,';
select to_number('100,12', '99999D99', 'NLS_NUMERIC_CHARACTERS='',.''')
from dual;

TO_NUMBER('100,12','99999D99','NLS_NUMERIC_CHARACTERS='',.''')
--------------------------------------------------------------
                                                        100.12 

Secara default hasilnya masih ditampilkan dengan pengaturan sesi saya, jadi pemisah desimal masih berupa titik.



  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 Mendapatkan Abad dari Tanggal di Oracle

  2. UNPIVOT pada jumlah kolom tak tentu

  3. Bagaimana menemukan sejarah waitevent dari sesi Oracle

  4. Fungsi NLS_CHARSET_DECL_LEN() di Oracle

  5. sqlplus cara menemukan detail sesi database yang saat ini terhubung