sql >> Database >  >> RDS >> Oracle

Getallen opmaken in Oracle

In Oracle Database kunt u getallen op vele manieren opmaken.

U kunt bijvoorbeeld een getal opmaken als valuta, met komma's en decimale punten op de juiste plaats. U kunt voorloopnullen specificeren, u kunt een fractioneel deel toevoegen - of verwijderen, als dat is wat nodig is.

Dit artikel bevat voorbeelden van het volgende:

  • Getallen opmaken als valuta
  • Een scheidingsteken voor komma's/duizenden toevoegen
  • Decimaaltekens opnemen
  • Verwijder alle decimalen
  • Voeg voorloopnullen toe aan een getal

Ik leg ook uit hoe de opmaak wordt beïnvloed door de NLS-parameters van je sessie.

NLS-initialisatieparameters bepalen welke tekens worden gebruikt voor het groepsscheidingsteken, het decimaalteken en het valutasymbool in de huidige sessie. U kunt profiteren van deze parameters om lokale opmaak uit te voeren.

U kunt functies gebruiken zoals TO_CHAR(number) en zelfs LPAD() om getallen naar een tekenreeks te converteren en ze direct op te maken zoals u wilt. Functies zoals CAST() kan ook van invloed zijn op de opmaak van een getal, afhankelijk van het gegevenstype waarin het wordt gecast.

Een snel voorbeeld

Hier is een snel voorbeeld van het opmaken van een getal met de TO_CHAR() functie:

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

Resultaat:

$12,345.00

De fmL99G999D00 deel is een formaatmodel dat bepaalt hoe de uitvoer moet worden opgemaakt. U kunt het formaatmodel naar uw wensen wijzigen.

Elk teken in het formaatmodel is een formaatelement en heeft een speciale betekenis. U kunt naar wens opmaakelementen toevoegen of verwijderen.

Hier is een volledige lijst met opmaakelementen die u voor uw opmaakmodel kunt gebruiken bij het opmaken van getallen.

Hoewel het waar is dat u een letterlijke tekenreeks kunt opgeven voor verschillende formaatelementen (bijvoorbeeld een dollarteken ($ ) voor dollars), wordt aangenomen dat de valuta is uitgedrukt in die hardcoded waarde. Er zijn veel andere mogelijke valuta's over de hele wereld en de formaatelementen kunnen dynamisch het lokale valutasymbool voor de sessie van de gebruiker retourneren.

Hetzelfde geldt voor het groepsscheidingsteken en het decimale teken. Verschillende landen gebruiken verschillende conventies. Het gebruik van deze locale-aware formaatelementen maakt je code draagbaarder.

Ook de TO_CHAR() functie stelt u in staat om uw eigen NLS-parameters binnen de functie door te geven. Als u dit doet, heeft dit alleen invloed op die functieaanroep, zodat u dingen zoals valutasymbolen direct kunt wijzigen zonder dat u deze in uw formaatmodel hoeft te hardcoderen of de NLS-parameters voor uw sessie bij te werken.

De volgende voorbeelden laten in meer detail zien hoe elk formaatelement werkt.

Getallen opmaken als valuta

Hier is een voorbeeld van het opmaken van een getal als valuta:

SELECT 
    TO_CHAR(12, 'fmL99')
FROM DUAL;

Resultaat:

$12

In dit geval gebruikte ik de L format-element om het lokale valutasymbool op te geven. Het lokale valutasymbool wordt bepaald door de NLS_CURRENCY parameter.

U kunt ook de C . gebruiken of U formaatelementen, die respectievelijk het ISO-valutasymbool en het dubbele valutasymbool retourneren.

Zie Getallen opmaken als valuta in Oracle voor meer informatie en voorbeelden.

Voeg een komma/duizenden scheidingsteken toe

Hoewel u altijd een hardgecodeerde komma kunt gebruiken voor uw scheidingsteken voor duizendtallen/groepen, houdt dit geen rekening met landen die een punt gebruiken voor hun groepsscheidingsteken. Het omgekeerde is duidelijk waar. Ook scheiden sommige landen duizenden groepen met een dunne ruimte.

U kunt de G . gebruiken format-element om een ​​groepsscheidingsteken op te geven. Dit retourneert dynamisch het toepasselijke groepsscheidingsteken zoals gespecificeerd in de NLS_NUMERIC_CHARACTERS parameter. Deze parameter bepaalt zowel het groepsscheidingsteken als het decimaalteken.

Voorbeeld:

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

Resultaat:

12,345

Hier is nog een voorbeeld met een groter getal:

SELECT 
    TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;

Resultaat:

123,456,789

Zie Een getal opmaken met een komma in Oracle voor een meer gedetailleerde bespreking.

Decimale plaatsen opnemen

Hoewel het waar is dat u uw eigen wortelteken (bijvoorbeeld een punt) hard kunt coderen in uw formaatmodel, is dit niet geschikt voor andere landinstellingen die een ander teken gebruiken.

U kunt de D . gebruiken format-element om het decimale/radix-teken terug te geven dat is opgegeven in de NLS_NUMERIC_CHARACTERS parameter voor de huidige sessie:

SELECT 
    TO_CHAR(7, 'fm9D00')
FROM DUAL;

Resultaat:

7.00

In dit geval heb ik twee 0 . gebruikt formaatelementen na het wortelteken. Dit formaatelement retourneert indien van toepassing volgnullen.

Een 9 gebruiken zou in dit geval eventuele volgnullen onderdrukken:

SELECT 
    TO_CHAR(7, 'fm9D99')
FROM DUAL;

Resultaat:

7.

Als we echter de fm format modifier, krijgen we een ander resultaat:

SELECT 
    TO_CHAR(7, '9D99')
FROM DUAL;

Resultaat:

 7.00

De fm format modifier onderdrukt eventuele opvulling die op het resultaat is toegepast. Door het te verwijderen, wordt ons resultaat opgevuld. Het bevat een voorloopspatie, omdat hier een minteken zou zijn geweest als het getal negatief was geweest. En het bevat ook volgnullen, omdat we twee 9 . hebben gespecificeerd formaatelementen.

Zie 3 manieren om een ​​getal op te maken tot 2 decimalen in Oracle voor meer ideeën voor het opmaken van getallen met decimalen.

Alle decimalen verwijderen

Er zijn verschillende manieren om een ​​getal op te maken zonder decimalen. Een voor de hand liggende manier is om simpelweg het decimale deel uit onze opmaakreeks te verwijderen:

SELECT 
    TO_CHAR(7, 'fm9')
FROM DUAL;

Resultaat:

7

Maar we kunnen ook andere functies gebruiken, zoals ROUND() , TRUNC() , en CAST() om hetzelfde of een vergelijkbaar effect te bereiken.

Zie 4 manieren om een ​​getal op te maken zonder decimalen in Oracle voor voorbeelden.

Voorloopnullen toevoegen

We hebben een aantal opties als het gaat om het toevoegen van voorloopnullen aan ons getal.

Nogmaals, vasthouden aan de TO_CHAR() functie, kunnen we de 0 . gebruiken format-element om voorloop- en volgnullen te retourneren.

SELECT 
    TO_CHAR(7, 'fm000')
FROM DUAL;

Resultaat:

007

Als we de 9 . hadden gebruikt format-element, zouden we geen voorloopnullen hebben:

SELECT 
    TO_CHAR(7, 'fm999')
FROM DUAL;

Resultaat:

7

Als we echter de fm formaatmodifier, we zouden een spatie hebben waar een voorloopnul zou zijn geweest:

SELECT 
    TO_CHAR(7, '999')
FROM DUAL;

Resultaat:

   7

Een andere manier om een ​​getal op te maken met voorloopnullen is met de LPAD() functie. Deze functie past linkeropvulling toe op een tekenreeks of nummer. U kunt specificeren welke tekens u voor de opvulling wilt gebruiken, en als u dus een nul gebruikt, wordt deze opgevuld met nullen.

Zie 2 manieren om een ​​getal op te maken met voorloopnullen in Oracle voor een voorbeeld.

Hoe de NLS-parameters te controleren

De NLS-parameters (National Language Support) bepalen het locale-specifieke gedrag op zowel de client als de server. Dit omvat parameters die bepalen welke tekens moeten worden gebruikt voor het groepsscheidingsteken, decimaalteken, valutasymbolen, enz.

Laten we eens kijken naar de huidige waarde van mijn NLS-parameters:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS;

Resultaat:

                 PARAMETER                             VALUE 
__________________________ _________________________________ 
NLS_LANGUAGE               ENGLISH                           
NLS_TERRITORY              AUSTRALIA                         
NLS_CURRENCY               $                                 
NLS_ISO_CURRENCY           AUSTRALIA                         
NLS_NUMERIC_CHARACTERS     .,                                
NLS_CALENDAR               GREGORIAN                         
NLS_DATE_FORMAT            DD/MON/RR                         
NLS_DATE_LANGUAGE          ENGLISH                           
NLS_CHARACTERSET           AL32UTF8                          
NLS_SORT                   BINARY                            
NLS_TIME_FORMAT            HH12:MI:SSXFF AM                  
NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
NLS_TIME_TZ_FORMAT         HH12:MI:SSXFF AM TZR              
NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    
NLS_DUAL_CURRENCY          $                                 
NLS_NCHAR_CHARACTERSET     AL16UTF16                         
NLS_COMP                   BINARY                            
NLS_LENGTH_SEMANTICS       BYTE                              
NLS_NCHAR_CONV_EXCP        FALSE                            

De volgende parameters bepalen opmaakelementen voor getallen en valuta:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

De standaardwaarde van deze parameters wordt bepaald door de NLS_TERRITORY parameter. Wanneer we de waarde van de NLS_TERRITORY parameter, stelt dit impliciet de waarde in voor verschillende andere parameters (inclusief de vier genoemde).

In mijn geval is mijn territorium Australië, en dus geven deze vier parameters weer hoe getallen doorgaans worden opgemaakt in Australië. Als ik het zou veranderen om te zeggen, Duitsland, dan zouden die vier parameters worden bijgewerkt om de opmaak voor Duitsland weer te geven.

U kunt elke parameter echter expliciet afzonderlijk instellen. Hiermee kunt u de waarde overschrijven die impliciet is ingesteld door de NLS_TERRITORY parameter.


  1. Snelste manier om 120 miljoen records bij te werken

  2. H2 postgresql-modus lijkt niet te werken voor mij

  3. SQLite-query:krijg alle kolommen van een rij (android)?

  4. Database implementeren vanuit bronbeheer