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

Cara Memformat Angka di Oracle

Di Oracle Database, Anda dapat memformat angka dengan banyak cara.

Misalnya, Anda dapat memformat angka sebagai mata uang, dengan koma dan titik desimal di tempat yang tepat. Anda dapat menentukan angka nol di depan, Anda dapat menambahkan bagian pecahan – atau menghapusnya, jika itu yang diperlukan.

Artikel ini berisi contoh berikut:

  • Memformat angka sebagai mata uang
  • Tambahkan pemisah koma/ribuan
  • Sertakan tempat desimal
  • Hapus semua tempat desimal
  • Menambahkan angka nol di depan sebuah angka

Saya juga menjelaskan bagaimana pemformatan dipengaruhi oleh parameter NLS sesi Anda.

Parameter inisialisasi NLS menentukan karakter mana yang digunakan untuk pemisah grup, karakter desimal, dan simbol mata uang di sesi saat ini. Anda dapat memanfaatkan parameter ini untuk menghasilkan pemformatan sadar lokal.

Anda dapat menggunakan fungsi seperti TO_CHAR(number) dan bahkan LPAD() untuk mengonversi angka menjadi string dan memformatnya persis seperti yang Anda suka dengan cepat. Fungsi seperti CAST() juga dapat memengaruhi cara angka diformat, bergantung pada tipe data yang digunakan untuk mentransmisikannya.

Contoh Singkat

Berikut adalah contoh cepat memformat angka menggunakan TO_CHAR() fungsi:

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

Hasil:

$12,345.00

fmL99G999D00 part adalah model format yang menentukan bagaimana output akan diformat. Anda dapat mengubah model format sesuai dengan kebutuhan Anda.

Setiap karakter dalam model format adalah elemen format, dan memiliki arti khusus. Anda dapat menambahkan atau menghapus elemen format sesuai kebutuhan.

Berikut adalah daftar lengkap elemen format yang dapat Anda gunakan untuk model format Anda saat memformat angka.

Meskipun benar bahwa Anda dapat memberikan literal string untuk berbagai elemen format (misalnya, tanda dolar ($ ) untuk dolar), ini mengasumsikan bahwa mata uang didenominasi dalam nilai hardcoded tersebut. Ada banyak kemungkinan mata uang lain di seluruh dunia, dan elemen format dapat secara dinamis mengembalikan simbol mata uang lokal untuk sesi pengguna.

Itu sama untuk pemisah grup dan karakter desimal. Lokal yang berbeda menggunakan konvensi yang berbeda. Menggunakan elemen format sadar lokal ini membuat kode Anda lebih portabel.

Juga, TO_CHAR() function memungkinkan Anda untuk meneruskan parameter NLS Anda sendiri di dalam fungsi. Melakukannya hanya akan memengaruhi panggilan fungsi tersebut, sehingga Anda dapat mengubah hal-hal seperti simbol mata uang dengan cepat tanpa perlu melakukan hardcode ke dalam model format Anda atau memperbarui parameter NLS untuk sesi Anda.

Contoh berikut menunjukkan cara kerja setiap elemen format secara lebih mendetail.

Memformat Angka sebagai Mata Uang

Berikut ini contoh pemformatan angka sebagai mata uang:

SELECT 
    TO_CHAR(12, 'fmL99')
FROM DUAL;

Hasil:

$12

Dalam hal ini, saya menggunakan L elemen format untuk menentukan simbol mata uang lokal. Simbol mata uang lokal ditentukan oleh NLS_CURRENCY parameter.

Sebagai alternatif, Anda dapat menggunakan C atau U elemen format, yang masing-masing mengembalikan simbol mata uang ISO dan simbol mata uang ganda.

Lihat Cara Memformat Angka sebagai Mata Uang di Oracle untuk info dan contoh lebih lanjut.

Tambahkan Pemisah Koma/Ribuan

Meskipun Anda selalu dapat menggunakan koma hardcode untuk pemisah ribuan/grup, ini tidak memperhitungkan negara yang menggunakan titik untuk pemisah grup mereka. Kebalikannya jelas benar. Selain itu, beberapa negara memisahkan ribuan kelompok dengan jarak yang tipis.

Anda dapat menggunakan G elemen format untuk menentukan pemisah grup. Ini secara dinamis mengembalikan pemisah grup yang berlaku seperti yang ditentukan dalam NLS_NUMERIC_CHARACTERS parameter. Parameter ini menentukan pemisah grup dan karakter desimal.

Contoh:

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

Hasil:

12,345

Berikut contoh lain dengan jumlah yang lebih besar:

SELECT 
    TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;

Hasil:

123,456,789

Lihat Cara Memformat Angka dengan Koma di Oracle untuk diskusi yang lebih mendetail.

Sertakan Tempat Desimal

Meskipun benar bahwa Anda dapat membuat hardcode karakter radix Anda sendiri (misalnya, titik) ke dalam model format Anda, ini tidak akan melayani lokal lain yang menggunakan karakter berbeda.

Anda dapat menggunakan D elemen format untuk mengembalikan karakter desimal/radix yang ditentukan dalam NLS_NUMERIC_CHARACTERS parameter untuk sesi saat ini:

SELECT 
    TO_CHAR(7, 'fm9D00')
FROM DUAL;

Hasil:

7.00

Dalam hal ini saya menggunakan dua 0 memformat elemen setelah karakter radix. Elemen format ini mengembalikan angka nol di belakang jika berlaku.

Menggunakan 9 akan menekan nol yang tertinggal dalam kasus ini:

SELECT 
    TO_CHAR(7, 'fm9D99')
FROM DUAL;

Hasil:

7.

Namun, jika kita menghapus fm pengubah format, kami mendapatkan hasil yang berbeda:

SELECT 
    TO_CHAR(7, '9D99')
FROM DUAL;

Hasil:

 7.00

fm pengubah format menekan padding apa pun yang telah diterapkan ke hasil. Dengan menghapusnya, hasil kami empuk. Ini berisi spasi awal, karena di sinilah tanda negatif akan hilang jika angkanya negatif. Dan itu juga berisi nol tambahan, karena kami menetapkan dua 9 elemen format.

Lihat 3 Cara Memformat Angka ke 2 Tempat Desimal di Oracle untuk ide lebih lanjut tentang cara memformat angka dengan tempat desimal.

Hapus Semua Tempat Desimal

Ada beberapa cara untuk memformat angka agar tidak memiliki tempat desimal. Salah satu cara yang jelas adalah dengan menghapus bagian desimal dari string format kami:

SELECT 
    TO_CHAR(7, 'fm9')
FROM DUAL;

Hasil:

7

Tapi kita juga bisa menggunakan fungsi lain, seperti ROUND() , TRUNC() , dan CAST() untuk mencapai efek yang sama atau serupa.

Lihat 4 Cara Memformat Angka Tanpa Desimal di Oracle sebagai contoh.

Tambahkan Nol Awal

Kami memiliki beberapa opsi untuk menambahkan angka nol di depan ke nomor kami.

Sekali lagi, tetap menggunakan TO_CHAR() fungsi, kita dapat menggunakan 0 elemen format untuk mengembalikan nol di depan dan di belakang.

SELECT 
    TO_CHAR(7, 'fm000')
FROM DUAL;

Hasil:

007

Jika kita menggunakan 9 elemen format, kami tidak akan mendapatkan nol di depan:

SELECT 
    TO_CHAR(7, 'fm999')
FROM DUAL;

Hasil:

7

Namun, jika kita menghapus fm pengubah format, kita akan mendapatkan ruang di mana nol di depan akan menjadi:

SELECT 
    TO_CHAR(7, '999')
FROM DUAL;

Hasil:

   7

Cara lain untuk memformat angka dengan nol di depan adalah dengan LPAD() fungsi. Fungsi ini menerapkan padding kiri ke string atau angka. Anda dapat menentukan karakter mana yang akan digunakan untuk padding, dan jika Anda menggunakan nol, maka itu akan diisi dengan nol.

Lihat 2 Cara Memformat Angka dengan Nol Awal di Oracle sebagai contoh.

Cara Memeriksa Parameter NLS

Parameter NLS (Dukungan Bahasa Nasional) menentukan perilaku spesifik lokal pada klien dan server. Ini termasuk parameter yang menentukan karakter mana yang akan digunakan untuk pemisah grup, karakter desimal, simbol mata uang, dll.

Mari kita periksa nilai parameter NLS saya saat ini:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS;

Hasil:

                 PARAMETER                             VALUE 
__________________________ _________________________________ 
NLS_LANGUAGE               ENGLISH                           
NLS_TERRITORY              AUSTRALIA                         
NLS_CURRENCY               $                                 
NLS_ISO_CURRENCY           AUSTRALIA                         
NLS_NUMERIC_CHARACTERS     .,                                
NLS_CALENDAR               GREGORIAN                         
NLS_DATE_FORMAT            DD/MON/RR                         
NLS_DATE_LANGUAGE          ENGLISH                           
NLS_CHARACTERSET           AL32UTF8                          
NLS_SORT                   BINARY                            
NLS_TIME_FORMAT            HH12:MI:SSXFF AM                  
NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
NLS_TIME_TZ_FORMAT         HH12:MI:SSXFF AM TZR              
NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    
NLS_DUAL_CURRENCY          $                                 
NLS_NCHAR_CHARACTERSET     AL16UTF16                         
NLS_COMP                   BINARY                            
NLS_LENGTH_SEMANTICS       BYTE                              
NLS_NCHAR_CONV_EXCP        FALSE                            

Parameter berikut menentukan elemen pemformatan untuk angka dan mata uang:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

Nilai default parameter ini ditentukan oleh NLS_TERRITORY parameter. Saat kita menetapkan nilai NLS_TERRITORY parameter, ini secara implisit menetapkan nilai untuk berbagai parameter lain (termasuk empat yang disebutkan).

Dalam kasus saya, wilayah saya adalah Australia, dan keempat parameter ini mencerminkan bagaimana angka biasanya diformat di Australia. Jika saya mengubahnya untuk mengatakan, Jerman, maka keempat parameter itu akan diperbarui untuk mencerminkan pemformatan untuk Jerman.

Namun, Anda dapat secara eksplisit mengatur setiap parameter satu per satu. Ini memungkinkan Anda untuk mengganti nilai yang secara implisit ditetapkan oleh NLS_TERRITORY parameter.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencatatan Query SQL Oracle

  2. ORA-01460:permintaan konversi yang tidak diterapkan atau tidak masuk akal

  3. Program PL/SQL untuk Menghapus Catatan Dari Tabel

  4. Bagaimana Cara Membuat Fungsi di PL/SQL?

  5. Bagaimana cara menghapus duplikat dari daftar yang dipisahkan koma oleh regexp_replace di Oracle?