Để đị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ố.