PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Memformat Angka sebagai Mata Uang di PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan Postgres untuk memeriksa string adalah angka

  2. Rails 3.1 - Mendorong ke Heroku - Kesalahan saat memasang adaptor postgres?

  3. Bagaimana cara saya masuk dan mengautentikasi ke Postgresql setelah instalasi baru?

  4. Disebabkan oleh:java.lang.NoSuchMethodError:org.postgresql.core.BaseConnection.getEncoding()Lorg/postgresql/core/Encoding;

  5. Mengapa akses array PostgreSQL jauh lebih cepat di C daripada di PL/pgSQL?