sql >> Database teknologi >  >> RDS >> Oracle

Sådan formateres datoer i Oracle

Denne artikel indeholder almindelige eksempler på formatering af datoer i Oracle Database.

Standarddatoformatet for din session bestemmes af forskellige NLS-initieringsparametre (her er, hvordan du kontrollerer dem). Du kan drage fordel af disse parametre til at udlæse lokalitetsbevidst formatering.

Du kan også bruge funktioner som TO_CHAR(number) at konvertere datoer til en streng og formatere dem nøjagtigt, som du vil have det på farten.

Standard datoformat

Når du returnerer en dato i Oracle, returneres den som standard i standarddatoformatet for den aktuelle session.

Eksempel:

SELECT DATE '2030-12-10' FROM DUAL;

Resultat:

10/DEC/30

I dette tilfælde er min sessions standarddatoformat DD/MON/RR , og så afspejler resultatet det.

Du kan ændre formatet ved enten at ændre NLS_TERRITORY parameter (som implicit ændrer andre parametre såsom datetime-parametre) eller ændring af NLS_DATE_FORMAT parameter direkte.

Her er, hvad der sker, når jeg ændrer NLS_TERRITORY parameter til et andet område:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT DATE '2030-12-10' FROM DUAL;

Resultat:

10.12.30

Standarddatoformatet er blevet opdateret, så det afspejler formatet for den pågældende lokalitet.

Der er også andre datetime NLS-parametre, såsom NLS_TIME_FORMAT , NLS_TIME_TZ_FORMAT , NLS_TIMESTAMP_FORMAT , og NLS_TIMESTAMP_TZ_FORMAT som du skal være opmærksom på, når du ændrer dato- og tidsformat.

Se også, hvordan du ændrer din sessions datoformat, hvis du vil ændre standard dato-tidsformat for din aktuelle session.

TO_CHAR() Funktion

The TO_CHAR(datetime) funktion accepterer en datetime-værdi og returnerer en streng formateret på en måde, som du angiver.

Her er et hurtigt eksempel:

SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Resultat:

Wed, 26 September 2035

Her returnerede funktionen den dato, der blev angivet i det første argument, i formatet angivet af det andet argument.

Det andet argument giver formatmodellen. Formatmodellen kan bestå af et eller flere formatelementer. For eksempel Dy er et formatelement, ligesom DD er , Month osv.

Hvis du ikke angiver et format, returneres det med standardformatet for sessionen.

Se denne fulde liste over Datetime Format Elements i Oracle for en liste over formatelementer, der kan bruges til at formatere datetime-værdier med denne funktion.

Nedenfor er mere specifikke eksempler.

Returnér dagsnavnet

Du kan returnere individuelle datodele, hvis det kræves. Du kan f.eks. returnere kun dagsnavnet, kun månedens navn osv. Alt du skal gøre er at bruge det relevante formatelement som det eneste formatelement i din formatmodel.

Her er et eksempel på returnering af dagsnavnet:

SELECT TO_CHAR(DATE '2035-09-26', 'Day')
FROM DUAL;

Resultat:

Wednesday

I dette tilfælde returnerede jeg hele dagsnavnet.

Vi kan bruge Dy som i det tidligere eksempel for at returnere kortdagens navn:

SELECT TO_CHAR(DATE '2035-09-26', 'Dy')
FROM DUAL;

Resultat:

Wed

Returnér månedens navn

Her er et eksempel på returnering af månedens navn:

SELECT TO_CHAR(DATE '2035-09-26', 'Month')
FROM DUAL;

Resultat:

September

Og det korte månedsnavn:

SELECT TO_CHAR(DATE '2035-09-26', 'Mon')
FROM DUAL;

Resultat:

Sep

Skrivar og bogstaver

I de foregående eksempler skrev vi det første bogstav med stort for dag- og månedsnavnene.

Vi kan alternativt bruge store bogstaver til at returnere dag- og månedsnavne med store bogstaver, og alle små bogstaver for at returnere dem med små bogstaver.

SELECT 
    TO_CHAR(DATE '2035-09-26', 'DY, Dy, dy')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'DAY, Day, day')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MON, Mon, mon')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MONTH, Month, month')
FROM DUAL;

Resultat:

WED, Wed, wed                           
WEDNESDAY, Wednesday, wednesday         
SEP, Sep, sep                           
SEPTEMBER, September, september         

Sprog

NLS_DATE_LANGUAGE parameter bruges til at bestemme sproget for datodele, der staves (såsom dagnavne og månedsnavne). Denne parameters standardværdi er afledt af NLS_LANGUAGE parameter.

Her er et eksempel på opdatering af NLS_DATE_LANGUAGE parameter, og returnerer derefter en formateret dato, der inkluderer dagens navn og månedsnavn:

ALTER SESSION SET NLS_DATE_LANGUAGE = 'Spanish';
SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Resultat:

Mié, 26 Septiembre 2035

Sproget kan også specificeres eksplicit fra TO_CHAR() selve funktionen. Hvis du gør dette, kan du midlertidigt tilsidesætte standardsprogindstillingerne for den aktuelle session uden at påvirke disse indstillinger.

Eksempel:

ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY',
    'NLS_DATE_LANGUAGE = Spanish'
    )
FROM DUAL;

Resultat:

Mié, 26 Septiembre 2035

I dette eksempel indstillede jeg min nuværende session til at bruge engelsk, og kørte derefter en forespørgsel for at udskrive en dato med spansk.

Som tidligere nævnt påvirkede udskrivning af datoen på spansk ikke den engelske indstilling. For at demonstrere dette kørte jeg følgende forespørgsel umiddelbart efter den (uden at ændre NLS_DATE_LANGUAGE parameter).

SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY'
    )
FROM DUAL;

Resultat:

Wed, 26 September 2035

Som forventet er resultatet på engelsk, som er standardsproget for den aktuelle session.


  1. Er der en måde at få adgang til den forrige rækkeværdi i en SELECT-sætning?

  2. Konverter datoformat til DD/MMM/ÅÅÅÅ-format i SQL Server

  3. Om V-formatelementet i Oracle

  4. Sådan undgår du tabelmutationsfejl