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.