Untuk memformat angka sebagai mata uang di Postgres, Anda dapat mengonversinya menjadi tipe data uang, atau menggunakan to_char()
untuk mengubahnya menjadi teks yang menyertakan simbol mata uang yang sesuai.
Ini jelas mengasumsikan bahwa nomor tersebut belum disimpan menggunakan jenis uang.
Berikut adalah contoh dari masing-masing opsi ini.
Konversikan ke Uang
Berikut ini contoh mengonversi angka ke tipe data uang.
SELECT cast(12 as money);
Hasil:
$12.00
Ini contoh lain, kali ini menggunakan jumlah yang lebih besar.
SELECT cast(123456.78 as money);
Hasil:
$123,456.78
Mengonversi dari Angka Floating Point
Disarankan untuk tidak menggunakan angka floating point untuk menangani uang karena potensi kesalahan pembulatan. Namun, jika Anda harus melakukannya, Anda dapat mengonversinya ke numerik terlebih dahulu, lalu ke uang.
SELECT '123456.78'::float8::numeric::money;
Hasil:
$123,456.78
Jika Anda mencoba mengonversi langsung dari floating point ke uang, Anda akan mendapatkan kesalahan.
SELECT '123456.78'::float8::money;
Hasil:
ERROR: cannot cast type double precision to money
Konversikan ke Teks
Berikut ini contoh penggunaan to_char()
untuk mengonversi nilai menjadi teks dengan simbol mata uang yang disertakan.
SELECT to_char(12, 'L99D99');
Hasil:
$ 12.00
Di sini, simbol mata uang dan tempat desimal menggunakan lokal saat ini.
String format untuk to_char()
harus sesuai dengan jumlah yang diharapkan.
Misalnya, jika jumlahnya bisa mencapai ratusan ribu, maka format string berikut akan lebih sesuai.
SELECT to_char(123456.78, 'L999G999D99');
Hasil:
$ 123,456.78
Dalam hal ini saya menambahkan G
pola template untuk pemisah grup sadar-lokal (juga disebut sebagai "pemisah ribuan"). Saya bisa menggunakan koma (,
), tapi itu tidak akan sadar-lokal.
Dan saya kembali menambahkan D
pola template untuk titik desimal sadar-lokal.
Inilah yang terjadi jika saya menghapus dua pola template tersebut dari string format saya.
SELECT to_char(123456.78, 'L999999');
Hasil:
$ 123457
Nol Tidak Penting
Anda dapat menggunakan 0
bukannya 9
untuk menjaga angka nol yang tidak signifikan.
9
pola template menjatuhkan nol yang tidak signifikan sedangkan 0
pola template tidak.
Berikut adalah contoh yang menggambarkan perbedaan antara keduanya.
SELECT
to_char(12, 'L9999') AS "L9999",
to_char(12, 'L0000') AS "L0000";
Hasil:
L9999 | L0000 --------+-------- $ 12 | $ 0012
Mode Pengisian
Ada pengubah pola template praktis yang disebut FM
. Ini untuk "mode pengisian", dan ini menekan angka nol di belakang dan titik kosong di depan.
Oleh karena itu, kita dapat menggunakan pengubah itu untuk memodifikasi contoh sebelumnya.
SELECT
to_char(12, 'LFM9999') AS "LFM9999",
to_char(12, 'LFM0000') AS "LFM0000";
Hasil:
LFM9999 | LFM0000 ---------+--------- $12 | $0012
Perhatikan bahwa itu menekan titik kosong di antara tanda dolar dan nomornya.