sql >> Databáze >  >> RDS >> Oracle

Jak formátovat číslo s čárkou v Oracle

Když použijete TO_CHAR() k formátování čísla v Oracle, použijete model formátu k určení, jak má být číslo formátováno.

Můžete například naformátovat číslo jako 12,345.00 nebo jako 12,345.00 , v závislosti na vašem národním prostředí.

Model formátu může obsahovat G nebo D formátování prvků pro přidání čárky k číslu. Který z nich použijete, závisí na tom, zda chcete čárku používat jako oddělovač tisíců nebo jako desetinný znak.

Případně můžete použít skutečnou čárku (, ), pokud chcete, ačkoli tato metoda nezná národní prostředí jako G a D prvky formátu jsou.

G a D Formátovat prvky

Zde je příklad demonstrující G a D prvky formátu:

SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

Výsledek:

12,345.00

V tomto případě je výstupem oddělovače skupin čárka a výstupem desetinného znaku tečka. Je to proto, že moje aktuální relace je NLS_TERRITORY parametr je nastaven na Australia .

Zde je to, co se stane, když změním své NLS_TERRITORY parametr do Germany :

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

Výsledek:

12,345.00

Nyní se jako desetinný znak používá čárka.

Pro rychlé vysvětlení výše uvedeného modelu formátu:

  • fm Modifikátor formátu potlačí veškeré výplně, které by mohly být použity na výsledek.
  • Číslo 9 znaky představují čísla.
  • 0 znak představuje čísla bez potlačení jakýchkoli úvodních nebo koncových nul.

Zde je úplný seznam prvků formátu čísel, které můžete použít jako rychlou referenci.

Ton NLS_NUMERIC_CHARACTERS Parametr

Když nastavíme NLS_TERRITORY (stejně jako v předchozím příkladu), tím se implicitně nastavuje spousta dalších parametrů, včetně NLS_NUMERIC_CHARACTERS parametr.

Ton NLS_NUMERIC_CHARACTERS Parametr určuje, které znaky se použijí pro oddělovač skupiny a desetinný znak.

Můžeme se dotázat na V$NLS_PARAMETERS zobrazit, které znaky se používají pro oddělovač skupiny a desetinný znak:

SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS';

Výsledek:

,.

Zde vidíme, že desetinný znak je reprezentován čárkou a oddělovač skupiny je reprezentován tečkou.

Hodnotu NLS_NUMERIC_CHARACTERS můžete změnit parametr přímo, pokud chcete (tj. bez změny NLS_TERRITORY parametr).

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';
SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

Výsledek:

12,345.00

Ale pravděpodobně byste se tomu měli vyhnout, protože to způsobí odpojení mezi parametry NLS. Vaše parametry NLS již neodrážejí výchozí hodnoty pro aktuální území. Pokud nemáte dobrý důvod to neudělat, je obvykle lepší změnit NLS_TERRITORY parametr na příslušné území, takže ostatní parametry lze také aktualizovat na výchozí hodnoty pro nové území.

'nlsparam' Argument

Jedna věc, kterou bych měl zmínit, je, že T0_CHAR() funkce přijímá třetí argument, který vám umožňuje dočasně nastavit různé parametry NLS, včetně NLS_NUMERIC_CHARACTERS parametr. Když to uděláte na úrovni funkcí, nezmění se tím hodnota těchto parametrů pro aktuální relaci.

Zde je příklad:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT 
    TO_CHAR(12345, 'fm99G999D00') AS "r1",
    TO_CHAR(
        12345, 'fm99G999D00',
        'NLS_NUMERIC_CHARACTERS = ''.,'''
        ) AS "r2",
    TO_CHAR(12345, 'fm99G999D00') AS "r3"
FROM DUAL;

Výsledek:

          r1           r2           r3 
____________ ____________ ____________ 
12.345,00    12,345.00    12.345,00   

Zde jsem nastavil území relace na Německo a poté zavolal TO_CHAR() třikrát.

  • První volání používá parametry NLS relace. To znamená, že výchozím oddělovačem skupiny je tečka.
  • Ve druhém volání jsem výslovně nastavil vlastní NLS_NUMERIC_CHARACTERS parametr z funkce. V tomto případě jsem nastavil oddělovač skupiny na čárku. To neovlivnilo parametry NLS mé relace, jak bylo vidět při třetím volání.
  • Třetí volání používá parametry NLS relace, stejně jako první volání. Jak vidíme, oddělovač skupiny a desetinný znak nebyly ovlivněny (dočasnou) změnou, kterou jsme provedli v našem druhém hovoru.

Pevně ​​zakódovaná čárka

Dalším způsobem, jak přidat čárku k číslu, je napevno jej zakódovat do modelu formátu.

Příklad:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT TO_CHAR(12345, 'fm99,999.00')
FROM DUAL;

Výsledek:

12,345.00

V tomto případě jsem napevno zakódoval čárku a tečku. Tím se ignoruje oddělovač skupin nastavený v NLS_NUMERIC_CHARACTERS parametr.

Více čárek

V rámci modelu formátu můžete mít více čárek a/nebo oddělovačů skupin.

Příklad:

ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT TO_CHAR(123456789, 'fm999G999G999D00')
FROM DUAL;

Výsledek:

123,456,789.00

Neplatné umístění čárkou

V modelu číselného formátu se vpravo od desetinného znaku nebo tečky nemůže objevit čárka nebo oddělovač skupin.

SELECT TO_CHAR(12345, 'fm99D999G00')
FROM DUAL;

Výsledek:

Error report -
ORA-01481: invalid number format model

  1. Připojte se k nám na Microsoft Access s SQL Server Academy část II

  2. Alternativy PGTune - Konfigurace ClusterControl PostgreSQL

  3. přidat sloupec do tabulky mysql, pokud neexistuje

  4. Dynamický Oracle Pivot_In_Clause