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.