W PostgreSQL możesz użyć to_char()
wyprowadzić liczbę w określonym formacie, w tym ze znakiem plus lub minus, aby wskazać, czy jest to liczba dodatnia, czy ujemna.
Aby to zrobić, użyj jednego z S
, MI
, PL
lub SG
w ciągu formatu.
Inną opcją jest użycie PR
aby ująć wartości ujemne w nawiasach ostrych.
Wzorce szablonów dla podpisanych numerów
Poniższe wzory szablonów mogą być użyte do nałożenia odpowiedniego znaku na numer.
Wzór | Opis |
---|---|
MI | Znak minus w określonej pozycji (jeśli liczba <0). |
PL | Znak plus w określonej pozycji (jeśli liczba> 0). |
SG | Znak plus lub minus w określonej pozycji, w zależności od tego, czy liczba jest dodatnia czy ujemna. |
S | Podpisz zakotwiczony do numeru (używa ustawień regionalnych). |
PR | Zawiera wszelkie ujemne wartości w nawiasach ostrych. |
Zwróć uwagę, że MI
, PL
lub SG
są rozszerzeniami Postgresa (nie są standardowym SQL).
Przykład przy użyciu S
Oto przykład demonstrujący S
wzór.
SELECT to_char(1, 'S9');
Wynik:
+1
W tym przypadku liczba jest dodatnia, więc przy użyciu moich ustawień regionalnych dodawany jest znak plus.
Oto znowu, ale z trzema wartościami; dodatni, ujemny i zero.
SELECT
to_char(1, 'S9') AS "1",
to_char(-1, 'S9') AS "-1",
to_char(0, 'S9') AS "0";
Wynik:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Przykład użycia SG
Oto ten sam przykład z SG
wzór.
SELECT
to_char(1, 'SG9') AS "1",
to_char(-1, 'SG9') AS "-1",
to_char(0, 'SG9') AS "0";
Wynik:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
Przykład użycia MI
Oto, co się stanie, jeśli zamienię SG
z MI
.
SELECT
to_char(1, 'MI9') AS "1",
to_char(-1, 'MI9') AS "-1",
to_char(0, 'MI9') AS "0";
Wynik:
1 | -1 | 0 ----+----+---- 1 | -1 | 0
Tylko liczba ujemna otrzymuje znak minus. Liczba dodatnia i zero nie mają żadnego znaku.
Przykład użycia PL
Oto dane wyjściowe w moim systemie, gdy używam PL
.
SELECT
to_char(1, 'PL9') AS "1",
to_char(-1, 'PL9') AS "-1",
to_char(0, 'PL9') AS "0";
Wynik:
1 | -1 | 0 -----+-----+----- + 1 | -1 | + 0
Przykład użycia PR
Oto dane wyjściowe w moim systemie, gdy używam PR
.
SELECT
to_char(1, '9PR') AS "1",
to_char(-1, '9PR') AS "-1",
to_char(0, '9PR') AS "0";
Wynik:
1 | -1 | 0 -----+-----+----- 1 | <1> | 0
Zwróć uwagę, że PR
musi przyjść po 9
.
Oto, co się stanie, jeśli spróbuję umieścić go przed 9
:
SELECT
to_char(1, 'PR9') AS "1",
to_char(-1, 'PR9') AS "-1",
to_char(0, 'PR9') AS "0";
Wynik:
ERROR: "9" must be ahead of "PR"
SG kontra S
Być może zauważyłeś, że przykłady z użyciem SG
i S
wydają się wyświetlać ten sam wynik, dlatego zastanawiam się, jaka jest między nimi różnica.
Różnica polega na tym, że S
jest zakotwiczony do numeru, podczas gdy SG
, MI
, PL
nie są.
S
używa również ustawień regionalnych, więc rzeczywisty używany znak będzie zależał od ustawień regionalnych.
Oto przykład, który pokazuje różnicę w zakotwiczeniu.
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG";
Wynik:
S | SG ------+------ +1 | + 1
A oto, co się dzieje, gdy liczba rośnie.
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";
Wynik:
S | SG | S | SG | S | SG ------+------+------+------+------+------ +1 | + 1 | +10 | + 10 | +100 | +100