В PostgreSQL можете да използвате to_char()
за да изведете число в определен формат, включително със знак плюс или минус, за да посочите дали е положително или отрицателно число.
За да направите това, използвайте един от S
, MI
, PL
, или SG
във вашия форматен низ.
Друга възможност е да използвате PR
за да оградите отрицателните стойности в ъглови скоби.
Шаблони за подписани числа
Следните шаблони могат да се използват за прилагане на съответния знак към числото.
Шаблон | Описание |
---|---|
MI | Знакът минус в определена позиция (ако числото <0). |
PL | Знаете плюс в определена позиция (ако числото> 0). |
SG | Знакът плюс или минус в определена позиция, в зависимост от това дали числото е положително или отрицателно. |
S | Знакът, закотвен към номер (използва локал). |
PR | Това обхваща всички отрицателни стойности в ъглови скоби. |
Обърнете внимание, че MI
, PL
, или SG
са разширения на Postgres (те не са стандартен SQL).
Пример за използване на S
Ето пример за демонстрация на S
модел.
SELECT to_char(1, 'S9');
Резултат:
+1
В този случай числото е положително и така, използвайки моя локал, знакът плюс е поставен преди него.
Ето го отново, но с три стойности; положително, отрицателно и нула.
ИЗБЕРЕТЕ to_char(1, 'S9') КАТО "1", to_char(-1, 'S9') КАТО "-1", to_char(0, 'S9') КАТО "0";код>
Резултат:
<преди> 1 | -1 | 0 ----+----+---- +1 | -1 | +0Пример за използване на SG
Ето същия пример с SG
модел.
ИЗБЕРЕТЕ to_char(1, 'SG9') КАТО "1", to_char(-1, 'SG9') КАТО "-1", to_char(0, 'SG9') КАТО "0";код>
Резултат:
<преди> 1 | -1 | 0 ----+----+---- +1 | -1 | +0Пример за използване на MI
Ето какво се случва, ако сменя SG
с MI
.
ИЗБЕРЕТЕ to_char(1, 'MI9') КАТО "1", to_char(-1, 'MI9') КАТО "-1", to_char(0, 'MI9') КАТО "0";код>
Резултат:
<преди> 1 | -1 | 0 ----+----+---- 1 | -1 | 0Само отрицателното число получава знака минус. Положителното число и нулата нямат знак.
Пример за използване на PL
Ето изхода на моята система, когато използвам PL
.
ИЗБЕРЕТЕ to_char(1, 'PL9') КАТО "1", to_char(-1, 'PL9') КАТО "-1", to_char(0, 'PL9') КАТО "0";код>
Резултат:
<преди> 1 | -1 | 0 -----+-----+----- + 1 | -1 | + 0Пример за използване на PR
Ето изхода на моята система, когато използвам PR
.
SELECT to_char(1, '9PR') AS "1", to_char(-1, '9PR') AS "-1", to_char(0, '9PR') AS "0";код>
Резултат:
<преди> 1 | -1 | 0 -----+-----+----- 1 | <1> | 0
Имайте предвид, че PR
трябва да дойде след 9
.
Ето какво се случва, ако се опитам да го сложа преди 9
:
SELECT to_char(1, 'PR9') AS "1", to_char(-1, 'PR9') AS "-1", to_char(0, 'PR9') AS "0";код>
Резултат:
ГРЕШКА:„9“ трябва да е пред „PR“
SG срещу S
Може да сте забелязали, че примерите, използващи SG
и S
изглежда дават същия резултат и затова се чудя каква е разликата между тях.
Разликата е, че S
е закотвен към номера, докато SG
, MI
, PL
не са.
S
също използва локала, така че действителният използван знак ще зависи от вашия локал.
Ето пример, който демонстрира разликата в закотвянето.
ИЗБЕРЕТЕ to_char(1, 'S999') КАТО "S", to_char(1, 'SG999') КАТО "SG";
Резултат:
<пред> S | SG ------+------ +1 | + 1И ето какво се случва с увеличаването на броя.
ИЗБЕРЕТЕ to_char(1, 'S999') КАТО "S", to_char(1, 'SG999') КАТО "SG", to_char(10, 'S999') КАТО "S", to_char(10, 'SG999') AS "SG", to_char(100, 'S999') AS "S", to_char(100, 'SG999') AS "SG";
Резултат:
<пред> S | ДВ | S | ДВ | S | SG ------+------+------+------+------+------+1 | + 1 | +10 | + 10 | +100 | +100