Cơ sở dữ liệu Oracle cung cấp TO_CHAR(number)
chức năng cho phép bạn định dạng số dựa trên một mô hình định dạng nhất định. Có ba phần tử định dạng mà bạn có thể sử dụng với TO_CHAR()
để trả về giá trị dưới dạng tiền tệ.
Các yếu tố định dạng tiền tệ
Các yếu tố định dạng tiền tệ là L
, C
và U
.
C | Trả về ký hiệu tiền tệ ISO (giá trị hiện tại của NLS_ISO_CURRENCY tham số). |
L | Trả về ký hiệu nội tệ (giá trị hiện tại của NLS_CURRENCY tham số). |
U | Trả về biểu tượng tiền tệ kép Euro (hoặc khác), được xác định bởi giá trị hiện tại của NLS_DUAL_CURRENCY tham số. |
Các mô hình định dạng này cho phép bạn xuất ký hiệu tiền tệ dựa trên cài đặt tiền tệ / khu vực của bạn, thay vì phải cung cấp ký hiệu tiền tệ cố định.
Mặc dù đúng là bạn có thể cung cấp một chuỗi ký tự cho đơn vị tiền tệ (ví dụ:ký hiệu đô la ($
) đối với đô la), điều này giả định rằng đơn vị tiền tệ có giá trị được mã hóa cứng đó. Có nhiều loại tiền tệ khả thi khác trên khắp thế giới và các yếu tố định dạng có thể tự động trả lại ký hiệu nội tệ cho phiên của người dùng.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT
TO_CHAR(12345, 'fmL99G999D00') AS "r1",
TO_CHAR(12345, 'fmC99G999D00') AS "r3",
TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;
Kết quả:
r1 r3 r3 _____________ _______________ _____________ $12,345.00 AUD12,345.00 $12,345.00
Sự khác biệt duy nhất giữa ba cột này là yếu tố định dạng tiền tệ. Đầu tiên sử dụng L
, thứ hai sử dụng C
và thứ ba sử dụng U
.
Tất cả đều sử dụng fm
công cụ sửa đổi định dạng để loại bỏ bất kỳ phần đệm nào. Họ cũng sử dụng 9
và 0
các phần tử định dạng để xuất ra các số (0
phần tử bao gồm các số không ở đầu / cuối). Chúng cũng bao gồm một dấu phân tách nhóm (được đại diện bởi G
), một ký tự thập phân (được đại diện bởi D
).
Tiền tệ kép
Trong ví dụ trên, tôi đặt NLS_TERRITORY
đến Australia
. Điều này dẫn đến cùng một ký hiệu tiền tệ được trả về ở hai trong ba cột (tức là r1
và r3
cột).
Trong ví dụ sau, tôi sử dụng một lãnh thổ khác:
ALTER SESSION SET NLS_TERRITORY = 'Denmark';
SELECT
TO_CHAR(12345, 'fmL99G999D00') AS "r1",
TO_CHAR(12345, 'fmC99G999D00') AS "r3",
TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;
Kết quả:
r1 r3 r3 ______________ _______________ _____________ kr12.345,00 DKK12.345,00 €12.345,00
Lần này, chúng tôi nhận được một ký hiệu tiền tệ khác nhau cho mỗi r1
và r3
cột.
Xem Cách Kiểm tra Giá trị của Tham số NLS nếu bạn cần kiểm tra.
'nlsparam'
Đối số
Khi sử dụng TO_CHAR()
hàm, 'nlsparam'
đối số có thể được sử dụng để chỉ định ký tự thập phân và dấu phân tách nhóm, ký hiệu nội tệ và ký hiệu tiền tệ quốc tế.
Nó có dạng sau:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
Ví dụ:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Kết quả:
€1.234,56
Đây là một lần nữa, nhưng lần này tôi thay thế L
với C
trong mô hình định dạng:
SELECT
TO_CHAR(
1234.56,
'fmC99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Kết quả:
EUR1.234,56
C
trả về ký hiệu tiền tệ ISO, trong trường hợp này là EUR
.
Xem Danh sách đầy đủ các phần tử định dạng số này trong Oracle để biết danh sách các phần tử định dạng có thể được sử dụng để định dạng số với TO_CHAR()
chức năng.