sql >> Databasteknik >  >> RDS >> Oracle

TO_CHAR(datetime) Funktion i Oracle

I Oracle Database, TO_CHAR(datetime) funktionen konverterar ett datum och tid eller ett intervallvärde till en VARCHAR2 värde i formatet som anges av datumformatet.

Syntax

Syntaxen ser ut så här:

TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])

Var:

  • datetime kan vara värdet DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE datatyp
  • interval kan vara värdet INTERVAL DAY TO SECOND , eller INTERVAL YEAR TO MONTH datatyp
  • fmt är en valfri formatmodell som anger hur resultatet ska formateras
  • 'nlsparam' är ett valfritt argument som anger på vilket språk månads- och dagnamn och förkortningar returneras.

Exempel

Här är ett exempel att visa:

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

Resultat:

WED, 26 SEPTEMBER 2035

Så det returnerade 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.

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.

Standardformat

Om du utelämnar fmt argument, kommer resultatet att konverteras enligt följande:

  • DATE värden konverteras till värden i standarddatumformatet.
  • TIMESTAMP och TIMESTAMP WITH LOCAL TIME ZONE värden konverteras till värden i standardformatet för tidsstämpel.
  • TIMESTAMP WITH TIME ZONE värden konverteras till värden i standardtidsstämpeln med tidszonsformat.
  • Intervallvärden konverteras till den numeriska representationen av intervallliteralen.

Här är ett exempel på en konvertering av en DATE värde utan att ange formatet:

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

Resultat:

26/SEP/35

I det här fallet är min sessions standarddatumformat DD/MON/RR , och så återspeglar resultatet det. Jag vet att detta är min sessions standarddatumformat eftersom jag frågade V$NLS_PARAMETERS vy, som visar mig det aktuella värdet för NLS-parametrarna.

Se Hur du kontrollerar värdena för NLS-parametrarna om du behöver kontrollera dem.

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

Intervall

Här är ett exempel som matar ut ett intervallvärde i standardformatet:

SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;

Resultat:

+25-02

'nlsparam' Argument

'nlsparam' argument anger språket som månads- och dagnamn och förkortningar returneras på. Detta argument kan ha följande form:

'NLS_DATE_LANGUAGE = language'

Exempel:

SELECT 
    TO_CHAR(
        DATE '2035-09-26', 
        'DY, DD MONTH YYYY',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

Resultat:

MIÉ, 26 SEPTIEMBRE 2035

Nollargument

Skickar null resulterar i null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Resultat:

null

Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Argument saknas

Att anropa funktionen utan att skicka några argument resulterar i ett fel:

SELECT TO_CHAR()
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT TO_CHAR()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Att skicka för många argument resulterar också i ett fel:

SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL
Error at Command Line : 1 Column : 72
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. Konfigurera SQL Server Log Shipping

  2. SQL UPPDATERING

  3. En SaaS-prenumerationsdatamodell

  4. Fel vid användning av mönstermatchning som inte liknar någon annan i PostgreSQL