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

Cara Memformat Angka dengan Koma di Oracle

Saat Anda menggunakan TO_CHAR() fungsi untuk memformat angka di Oracle, Anda menggunakan model format untuk menentukan bagaimana angka harus diformat.

Misalnya, Anda dapat memformat angka seperti 12,345.00 atau seperti 12.345,00 , tergantung pada lokal Anda.

Model format dapat menyertakan G atau D elemen format untuk menambahkan koma ke angka. Yang mana yang Anda gunakan bergantung pada apakah Anda ingin koma sebagai pemisah ribuan, atau sebagai karakter desimal.

Atau, Anda dapat menggunakan karakter koma yang sebenarnya (, ) jika Anda mau, meskipun metode ini tidak mengenali lokal seperti G dan D elemen format adalah.

G dan D Elemen Format

Berikut adalah contoh untuk mendemonstrasikan G dan D elemen format:

SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

Hasil:

12,345.00

Dalam hal ini, pemisah grup mengeluarkan koma, dan karakter desimal mengeluarkan titik. Itu karena NLS_TERRITORY sesi saya saat ini parameter disetel ke Australia .

Inilah yang terjadi jika saya mengubah NLS_TERRITORY saya parameter ke Germany :

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

Hasil:

12.345,00

Sekarang koma digunakan untuk karakter desimal.

Sebagai penjelasan singkat dari model format di atas:

  • fm pengubah format menekan setiap padding yang mungkin diterapkan pada hasil.
  • 9 karakter mewakili angka.
  • 0 karakter mewakili angka tanpa menekan nol di depan atau di belakang.

Berikut daftar lengkap elemen format angka yang dapat Anda gunakan sebagai referensi cepat.

Tdia NLS_NUMERIC_CHARACTERS Parameter

Saat kita menyetel NLS_TERRITORY parameter (seperti pada contoh sebelumnya), ini secara implisit menetapkan sekelompok parameter lain, termasuk NLS_NUMERIC_CHARACTERS parameter.

Tdia NLS_NUMERIC_CHARACTERS parameter menentukan karakter mana yang digunakan untuk pemisah grup dan karakter desimal.

Kita dapat menanyakan V$NLS_PARAMETERS tampilan untuk melihat karakter mana yang digunakan untuk pemisah grup dan karakter desimal:

SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS';

Hasil:

,.

Di sini kita melihat bahwa karakter desimal dilambangkan dengan koma, dan pemisah grup dilambangkan dengan titik.

Anda dapat mengubah nilai NLS_NUMERIC_CHARACTERS parameter secara langsung jika Anda mau (yaitu tanpa mengubah NLS_TERRITORY parameter).

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';
SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

Hasil:

12,345.00

Tetapi Anda mungkin harus menghindari melakukan ini, karena ini menyebabkan pemutusan antara parameter NLS. Parameter NLS Anda tidak lagi mencerminkan nilai default untuk wilayah saat ini. Kecuali Anda memiliki alasan kuat untuk tidak melakukannya, biasanya lebih baik mengubah NLS_TERRITORY parameter ke wilayah yang relevan, sehingga parameter lain juga dapat diperbarui ke default untuk wilayah baru.

'nlsparam' Argumen

Satu hal yang harus saya sebutkan adalah bahwa T0_CHAR() function menerima argumen ketiga yang memungkinkan Anda menyetel berbagai parameter NLS untuk sementara, termasuk NLS_NUMERIC_CHARACTERS parameter. Saat Anda melakukan ini di tingkat fungsi, itu tidak mengubah nilai parameter tersebut untuk sesi saat ini.

Ini contohnya:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT 
    TO_CHAR(12345, 'fm99G999D00') AS "r1",
    TO_CHAR(
        12345, 'fm99G999D00',
        'NLS_NUMERIC_CHARACTERS = ''.,'''
        ) AS "r2",
    TO_CHAR(12345, 'fm99G999D00') AS "r3"
FROM DUAL;

Hasil:

          r1           r2           r3 
____________ ____________ ____________ 
12.345,00    12,345.00    12.345,00   

Di sini, saya mengatur wilayah sesi ke Jerman, dan kemudian memanggil TO_CHAR() tiga kali.

  • Panggilan pertama menggunakan parameter NLS sesi. Ini berarti pemisah grup default adalah titik.
  • Pada panggilan kedua, saya secara eksplisit mengatur NLS_NUMERIC_CHARACTERS saya sendiri parameter dari dalam fungsi. Dalam hal ini, saya mengatur pemisah grup menjadi koma. Melakukan hal ini tidak memengaruhi parameter NLS sesi saya, seperti yang terlihat pada panggilan ketiga.
  • Panggilan ketiga menggunakan parameter NLS sesi, sama seperti panggilan pertama. Seperti yang kita lihat, pemisah grup dan karakter desimal tidak terpengaruh oleh perubahan (sementara) yang kita lakukan di panggilan kedua.

Koma yang Di-hardcode

Cara lain untuk menambahkan koma ke angka adalah dengan mengkodekannya ke dalam model format Anda.

Contoh:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT TO_CHAR(12345, 'fm99,999.00')
FROM DUAL;

Hasil:

12,345.00

Dalam hal ini saya hardcoded koma dan titik. Melakukan hal ini mengabaikan pemisah grup yang disetel di NLS_NUMERIC_CHARACTERS parameter.

Beberapa Koma

Anda dapat memiliki beberapa pemisah koma dan/atau grup dalam model format.

Contoh:

ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT TO_CHAR(123456789, 'fm999G999G999D00')
FROM DUAL;

Hasil:

123,456,789.00

Penempatan Koma Tidak Valid

Pemisah koma atau grup tidak boleh muncul di sebelah kanan karakter desimal atau titik dalam model format angka.

SELECT TO_CHAR(12345, 'fm99D999G00')
FROM DUAL;

Hasil:

Error report -
ORA-01481: invalid number format model

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. KUNCI ASING PADA HAPUS BATASAN Kesalahan - Oracle

  2. Bagaimana cara mengisi tabel kalender di Oracle?

  3. Bagaimana Menghubungkan Aliran Udara ke database oracle

  4. java.sql.SQLException:Kumpulan Hasil Habis

  5. Fungsi TRUNC(tanggal) di Oracle