Trong PostgreSQL, bạn có thể sử dụng to_char()
để xuất ra một số ở một định dạng nhất định, bao gồm cả dấu cộng hoặc dấu trừ để cho biết đó là số dương hay số âm.
Để thực hiện việc này, hãy sử dụng một trong S
, MI
, PL
hoặc SG
trong chuỗi định dạng của bạn.
Một tùy chọn khác là sử dụng PR
để đặt bất kỳ giá trị âm nào trong dấu ngoặc nhọn.
Mẫu Mẫu cho Số đã ký
Các mẫu mẫu sau có thể được sử dụng để áp dụng dấu hiệu thích hợp cho số.
Mẫu | Mô tả |
---|---|
MI | Dấu trừ ở vị trí đã chỉ định (nếu số <0). |
PL | Dấu cộng ở vị trí đã chỉ định (nếu số> 0). |
SG | Dấu cộng hoặc dấu trừ ở vị trí đã chỉ định, tùy thuộc vào số là số dương hay số âm. |
S | Ký hiệu được neo vào số (sử dụng ngôn ngữ). |
PR | Điều này bao gồm mọi giá trị âm bên trong dấu ngoặc nhọn. |
Lưu ý rằng MI
, PL
hoặc SG
là các tiện ích mở rộng Postgres (chúng không phải là SQL chuẩn).
Ví dụ sử dụng S
Dưới đây là một ví dụ để chứng minh S
mẫu.
SELECT to_char(1, 'S9');
Kết quả:
+1
Trong trường hợp này, số là số dương và do đó sử dụng ngôn ngữ của tôi, dấu cộng được thêm vào trước.
Đây là nó một lần nữa, nhưng với ba giá trị; một tích cực, một tiêu cực và bằng không.
SELECT
to_char(1, 'S9') AS "1",
to_char(-1, 'S9') AS "-1",
to_char(0, 'S9') AS "0";
Kết quả:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Ví dụ sử dụng SG
Đây là ví dụ tương tự với SG
mẫu.
SELECT
to_char(1, 'SG9') AS "1",
to_char(-1, 'SG9') AS "-1",
to_char(0, 'SG9') AS "0";
Kết quả:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Ví dụ sử dụng MI
Đây là những gì sẽ xảy ra nếu tôi hoán đổi SG
với MI
.
SELECT
to_char(1, 'MI9') AS "1",
to_char(-1, 'MI9') AS "-1",
to_char(0, 'MI9') AS "0";
Kết quả:
1 | -1 | 0 ----+----+---- 1 | -1 | 0
Chỉ số âm mới nhận được dấu trừ. Số dương và số 0 không có bất kỳ dấu hiệu nào.
Ví dụ sử dụng PL
Đây là kết quả đầu ra trên hệ thống của tôi khi tôi sử dụng PL
.
SELECT
to_char(1, 'PL9') AS "1",
to_char(-1, 'PL9') AS "-1",
to_char(0, 'PL9') AS "0";
Kết quả:
1 | -1 | 0 -----+-----+----- + 1 | -1 | + 0
Ví dụ sử dụng PR
Đây là kết quả đầu ra trên hệ thống của tôi khi tôi sử dụng PR
.
SELECT
to_char(1, '9PR') AS "1",
to_char(-1, '9PR') AS "-1",
to_char(0, '9PR') AS "0";
Kết quả:
1 | -1 | 0 -----+-----+----- 1 | <1> | 0
Lưu ý rằng PR
phải đến sau 9
.
Đây là những gì sẽ xảy ra nếu tôi cố gắng đặt nó trước 9
:
SELECT
to_char(1, 'PR9') AS "1",
to_char(-1, 'PR9') AS "-1",
to_char(0, 'PR9') AS "0";
Kết quả:
ERROR: "9" must be ahead of "PR"
SG so với S
Bạn có thể nhận thấy rằng các ví dụ sử dụng SG
và S
xuất hiện cùng một kết quả và do đó tự hỏi sự khác biệt giữa chúng là gì.
Sự khác biệt là S
được neo vào số trong khi SG
, MI
, PL
không.
S
cũng sử dụng ngôn ngữ, do đó, ký hiệu thực tế được sử dụng sẽ phụ thuộc vào ngôn ngữ của bạn.
Dưới đây là một ví dụ chứng minh sự khác biệt về điểm neo.
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG";
Kết quả:
S | SG ------+------ +1 | + 1
Và đây là những gì sẽ xảy ra khi số lượng ngày càng lớn.
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG",
to_char(10, 'S999') AS "S",
to_char(10, 'SG999') AS "SG",
to_char(100, 'S999') AS "S",
to_char(100, 'SG999') AS "SG";
Kết quả:
S | SG | S | SG | S | SG ------+------+------+------+------+------ +1 | + 1 | +10 | + 10 | +100 | +100