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.