sql >> Databáze >  >> RDS >> PostgreSQL

Před číslo v PostgreSQL přidejte znaménko plus/mínus

V PostgreSQL můžete použít to_char() pro výstup čísla v určitém formátu, včetně znaménka plus nebo mínus, které označují, zda se jedná o kladné nebo záporné číslo.

Chcete-li to provést, použijte jeden z S , MI , PL nebo SG ve vašem formátovacím řetězci.

Další možností je použít PR za účelem uzavření jakýchkoli záporných hodnot do lomených závorek.

Vzory šablon pro čísla se znaménkem

Následující vzory šablon lze použít k použití příslušného znaku na číslo.

Vzor Popis
MI Znaménko mínus na zadané pozici (pokud je číslo <0).
PL Znaménko plus na zadané pozici (pokud číslo> 0).
SG Znaménko plus nebo mínus na zadané pozici v závislosti na tom, zda je číslo kladné nebo záporné.
S Znamení ukotveno k číslu (používá národní prostředí).
PR Toto uzavírá všechny záporné hodnoty do lomených závorek.

Všimněte si, že MI , PL nebo SG jsou rozšíření Postgres (nejsou to standardní SQL).

Příklad pomocí S

Zde je příklad demonstrující S vzor.

SELECT to_char(1, 'S9');

Výsledek:

+1

V tomto případě je číslo kladné, a tak při použití mého národního prostředí je k němu připojeno znaménko plus.

Tady je to znovu, ale se třemi hodnotami; kladné, záporné a nulové.

SELECT 
  to_char(1, 'S9') AS "1",
  to_char(-1, 'S9') AS "-1",
  to_char(0, 'S9') AS "0";

Výsledek:

 1  | -1 | 0  
----+----+----
 +1 | -1 | +0

Příklad pomocí SG

Zde je stejný příklad s SG vzor.

SELECT 
  to_char(1, 'SG9') AS "1",
  to_char(-1, 'SG9') AS "-1",
  to_char(0, 'SG9') AS "0";

Výsledek:

 1  | -1 | 0  
----+----+----
 +1 | -1 | +0

Příklad pomocí MI

Zde je to, co se stane, když vyměním SG s MI .

SELECT 
  to_char(1, 'MI9') AS "1",
  to_char(-1, 'MI9') AS "-1",
  to_char(0, 'MI9') AS "0";

Výsledek:

 1  | -1 | 0  
----+----+----
  1 | -1 |  0

Pouze záporné číslo dostane znaménko mínus. Kladné číslo a nula nemají žádné znaménko.

Příklad pomocí PL

Zde je výstup na mém systému, když používám PL .

SELECT 
  to_char(1, 'PL9') AS "1",
  to_char(-1, 'PL9') AS "-1",
  to_char(0, 'PL9') AS "0";

Výsledek:

  1  | -1  |  0  
-----+-----+-----
 + 1 |  -1 | + 0

Příklad použití PR

Zde je výstup na mém systému, když používám PR .

SELECT 
  to_char(1, '9PR') AS "1",
  to_char(-1, '9PR') AS "-1",
  to_char(0, '9PR') AS "0";

Výsledek:

  1  | -1  |  0  
-----+-----+-----
  1  | <1> |  0 

Všimněte si, že PR musí přijít po 9 .

Zde je to, co se stane, když to zkusím vložit před 9 :

SELECT 
  to_char(1, 'PR9') AS "1",
  to_char(-1, 'PR9') AS "-1",
  to_char(0, 'PR9') AS "0";

Výsledek:

ERROR:  "9" must be ahead of "PR"

SG versus S

Možná jste si všimli, že příklady používající SG a S Zdá se, že výsledkem je stejný výsledek, a proto se ptáte, jaký je mezi nimi rozdíl.

Rozdíl je v tom, že S je ukotven k číslu, zatímco SG , MI , PL nejsou.

S také používá národní prostředí, takže skutečný použitý znak bude záviset na vašem národním prostředí.

Zde je příklad, který ukazuje rozdíl v ukotvení.

SELECT 
  to_char(1, 'S999') AS "S",
  to_char(1, 'SG999') AS "SG";

Výsledek:

  S   |  SG  
------+------
   +1 | +  1

A tady je to, co se stane, když číslo roste.

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";

Výsledek:

  S   |  SG  |  S   |  SG  |  S   |  SG  
------+------+------+------+------+------
   +1 | +  1 |  +10 | + 10 | +100 | +100

  1. Ad-hoc spojovací řetězce a heterogenní dotazy pro MS Access

  2. TSQL Try / Catch within Transaction nebo naopak?

  3. Funkce SINH() v Oracle

  4. oracle 12c - výběr řetězce po posledním výskytu znaku