PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách định dạng số dưới dạng tiền tệ trong PostgreSQL

Để định dạng một số dưới dạng đơn vị tiền tệ trong Postgres, bạn có thể chuyển đổi nó sang kiểu dữ liệu tiền hoặc sử dụng to_char() để chuyển nó thành văn bản có ký hiệu tiền tệ thích hợp.

Điều này rõ ràng giả định rằng số chưa được lưu trữ bằng loại tiền.

Dưới đây là các ví dụ về từng tùy chọn này.

Chuyển đổi thành tiền

Dưới đây là một ví dụ về việc chuyển đổi một số thành loại dữ liệu tiền.

SELECT cast(12 as money);

Kết quả:

$12.00

Đây là một ví dụ khác, lần này sử dụng số tiền lớn hơn.

SELECT cast(123456.78 as money);

Kết quả:

$123,456.78

Chuyển đổi từ Số Dấu phẩy động

Bạn không nên sử dụng số dấu phẩy động để xử lý tiền do có thể xảy ra lỗi làm tròn. Tuy nhiên, nếu bạn phải làm điều đó, trước tiên bạn có thể chuyển đổi sang số, sau đó chuyển sang tiền.

SELECT '123456.78'::float8::numeric::money;

Kết quả:

$123,456.78

Nếu bạn cố gắng chuyển đổi trực tiếp từ dấu phẩy động sang tiền, bạn sẽ gặp lỗi.

SELECT '123456.78'::float8::money;

Kết quả:

ERROR:  cannot cast type double precision to money

Chuyển đổi sang văn bản

Đây là một ví dụ về việc sử dụng to_char() để chuyển đổi giá trị thành văn bản có kèm theo ký hiệu tiền tệ.

SELECT to_char(12, 'L99D99');

Kết quả:

$12.00

Ở đây, cả ký hiệu tiền tệ và vị trí thập phân đều sử dụng ngôn ngữ hiện tại.

Chuỗi định dạng cho to_char() sẽ cần phải phù hợp với số tiền dự kiến.

Ví dụ:nếu số tiền có thể lên đến hàng trăm nghìn, thì chuỗi định dạng sau sẽ thích hợp hơn.

SELECT to_char(123456.78, 'L999G999D99');

Kết quả:

$123,456.78

Trong trường hợp này, tôi đã thêm G mẫu mẫu cho dấu phân tách nhóm nhận biết ngôn ngữ (còn được gọi là "dấu phân cách hàng nghìn"). Tôi có thể đã sử dụng dấu phẩy (, ), nhưng điều đó sẽ không nhận biết được ngôn ngữ.

Và tôi lại thêm D mẫu mẫu cho dấu thập phân nhận biết ngôn ngữ.

Đây là những gì sẽ xảy ra nếu tôi xóa hai mẫu mẫu đó khỏi chuỗi định dạng của mình.

SELECT to_char(123456.78, 'L999999');

Kết quả:

$ 123457

Zeros tầm thường

Bạn có thể sử dụng 0 thay vì 9 để giữ các số không quan trọng.

9 mẫu mẫu giảm bất kỳ số 0 không đáng kể nào trong khi 0 mẫu mẫu thì không.

Dưới đây là một ví dụ minh họa sự khác biệt giữa hai điều này.

SELECT 
  to_char(12, 'L9999') AS "L9999",
  to_char(12, 'L0000') AS "L0000";

Kết quả:

 L9999  | L0000  
--------+--------
 $   12 | $ 0012

Chế độ lấp đầy

Có một công cụ sửa đổi mẫu mẫu tiện dụng được gọi là FM . Đây là cho "chế độ điền" và nó loại bỏ các số không ở cuối và khoảng trống ở đầu.

Do đó, chúng tôi có thể sử dụng công cụ sửa đổi đó để sửa đổi ví dụ trước đó.

SELECT 
  to_char(12, 'LFM9999') AS "LFM9999",
  to_char(12, 'LFM0000') AS "LFM0000";

Kết quả:

 LFM9999 | LFM0000 
---------+---------
 $12     | $0012

Lưu ý rằng nó đã loại bỏ các khoảng trống ở đầu giữa ký hiệu đô la và số.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sách “Hiệu suất cao PostgreSQL 9.0” đã ra mắt

  2. CHỌN hoặc CHÈN một hàng trong một lệnh

  3. Cách triển khai phân phối Percona cho PostgreSQL để có tính khả dụng cao

  4. Làm cách nào để nối các chuỗi của một trường chuỗi trong một truy vấn PostgreSQL 'group by'?

  5. Kết nối Django với postgres bằng docker-soạn