sql >> Databasteknik >  >> RDS >> Oracle

Hur man formaterar datum i Oracle

Den här artikeln innehåller vanliga exempel på formatering av datum i Oracle Database.

Standarddatumformatet för din session bestäms av olika NLS-initieringsparametrar (så här kontrollerar du dem). Du kan dra fördel av dessa parametrar för att mata ut språkmedveten formatering.

Du kan också använda funktioner som TO_CHAR(number) att konvertera datum till en sträng och formatera dem precis som du vill i farten.

Standard datumformat

När du returnerar ett datum i Oracle, returneras det som standard i standarddatumformatet för den aktuella sessionen.

Exempel:

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

Resultat:

10/DEC/30

I det här fallet är min sessions standarddatumformat DD/MON/RR , och så återspeglar resultatet det.

Du kan ändra formatet genom att antingen ändra NLS_TERRITORY parameter (som implicit ändrar andra parametrar såsom datetime-parametrar), eller ändra NLS_DATE_FORMAT parameter direkt.

Här är vad som händer när jag ändrar NLS_TERRITORY parameter till ett annat territorium:

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

Resultat:

10.12.30

Standarddatumformatet har uppdaterats för att återspegla formatet för det språket.

Det finns även andra datetime NLS-parametrar, såsom NLS_TIME_FORMAT , NLS_TIME_TZ_FORMAT , NLS_TIMESTAMP_FORMAT , och NLS_TIMESTAMP_TZ_FORMAT som du måste vara medveten om när du ändrar datum- och tidsformat.

Se även Hur du ändrar din sessions datumformat om du vill ändra standardformatet för datum och tid för din nuvarande session.

TO_CHAR() Funktion

The TO_CHAR(datetime) funktion accepterar ett datetime-värde och returnerar en sträng formaterad på ett sätt som du anger.

Här är ett snabbt exempel:

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

Resultat:

Wed, 26 September 2035

Här returnerade funktionen datumet som angavs i det första argumentet, i formatet som anges av det andra argumentet.

Det andra argumentet tillhandahåller formatmodellen. Formatmodellen kan bestå av ett eller flera formatelement. Till exempel Dy är ett formatelement, liksom DD , Month , etc.

Om du inte anger ett format, returneras det med standardformatet för sessionen.

Se den här fullständiga listan över Datetime Format Elements i Oracle för en lista över formatelement som kan användas för att formatera datetime-värden med den här funktionen.

Nedan finns mer specifika exempel.

Återställ dagnamnet

Du kan returnera enskilda datumdelar om det behövs. Du kan till exempel bara returnera dagsnamnet, bara månadsnamnet etc. Allt du behöver göra är att använda det tillämpliga formatelementet som det enda formatelementet i din formatmodell.

Här är ett exempel på att returnera dagens namn:

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

Resultat:

Wednesday

I det här fallet returnerade jag hela dagen namn.

Vi kan använda Dy som i det tidigare exemplet för att returnera kortdagsnamnet:

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

Resultat:

Wed

Återställ månadens namn

Här är ett exempel på hur månadens namn returneras:

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

Resultat:

September

Och det korta månadsnamnet:

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

Resultat:

Sep

Skaftkänslighet

I de tidigare exemplen skrev vi den första bokstaven med versaler för dag- och månadsnamnen.

Vi kan alternativt använda alla versaler för att returnera dag- och månadsnamnen med versaler, och alla gemener för att returnera dem med gemener.

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         

Språk

NLS_DATE_LANGUAGE parameter används för att bestämma språket för datumdelar som stavas (som dagnamn och månadsnamn). Den här parameterns standardvärde härleds från NLS_LANGUAGE parameter.

Här är ett exempel på hur du uppdaterar NLS_DATE_LANGUAGE parametern och returnerar sedan ett formaterat datum som inkluderar dagens namn och månadsnamn:

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

Språket kan också explicit specificeras från TO_CHAR() funktionen själv. Genom att göra detta kan du tillfälligt åsidosätta standardspråkinställningarna för den aktuella sessionen, utan att dessa inställningar påverkas.

Exempel:

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 det här exemplet ställde jag in min nuvarande session på engelska och körde sedan en fråga för att mata ut ett datum med spanska.

Som tidigare antytts påverkade inte det engelska inställningen att skriva ut datumet på spanska. För att visa detta körde jag följande fråga omedelbart efter den (utan att ändra NLS_DATE_LANGUAGE parameter).

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

Resultat:

Wed, 26 September 2035

Som förväntat är resultatet på engelska, vilket är standardspråket för den aktuella sessionen.


  1. Skapa en schemabunden UDF i SQL Server

  2. Dominoernas hemligheter, eller en dominospeldatamodell

  3. Hur bygger man om en inkonsekvent MySQL-slav?

  4. Vad är det korrekta namnet på en associationstabell (en många-till-många-relation)