sql >> Database >  >> RDS >> Oracle

TO_CHAR(datetime) Functie in Oracle

In Oracle Database, de TO_CHAR(datetime) functie converteert een datetime of intervalwaarde naar een VARCHAR2 waarde in het formaat gespecificeerd door het datumformaat.

Syntaxis

De syntaxis gaat als volgt:

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

Waar:

  • datetime kan een waarde zijn van DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE gegevenstype
  • interval kan een waarde zijn van INTERVAL DAY TO SECOND , of INTERVAL YEAR TO MONTH gegevenstype
  • fmt is een optioneel formaatmodel dat specificeert hoe het resultaat moet worden opgemaakt
  • 'nlsparam' is een optioneel argument dat de taal specificeert waarin maand- en dagnamen en afkortingen worden geretourneerd.

Voorbeeld

Hier is een voorbeeld om te demonstreren:

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

Resultaat:

WED, 26 SEPTEMBER 2035

Het gaf dus de datum terug die in het eerste argument was opgegeven, in het formaat gespecificeerd door het tweede argument.

Het tweede argument levert het formaatmodel. Het formaatmodel kan uit één of meerdere formaatelementen bestaan. Bijvoorbeeld DY is een formaatelement, net als DD , MONTH , enz.

Zie deze volledige lijst met datum/tijd-indelingselementen in Oracle voor een lijst met opmaakelementen die kunnen worden gebruikt om datum/tijd-waarden op te maken met deze functie.

Standaardformaat

Als u de fmt . weglaat argument, wordt het resultaat als volgt geconverteerd:

  • DATE waarden worden geconverteerd naar waarden in de standaard datumnotatie.
  • TIMESTAMP en TIMESTAMP WITH LOCAL TIME ZONE waarden worden geconverteerd naar waarden in het standaard tijdstempelformaat.
  • TIMESTAMP WITH TIME ZONE waarden worden geconverteerd naar waarden in de standaard tijdstempel met tijdzone-indeling.
  • Intervalwaarden worden geconverteerd naar de numerieke weergave van de letterlijke interval.

Hier is een voorbeeld van het converteren van een DATE waarde zonder het formaat op te geven:

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

Resultaat:

26/SEP/35

In dit geval is het standaard datumformaat van mijn sessie DD/MON/RR , en dus weerspiegelt het resultaat dat. Ik weet dat dit de standaard datumnotatie van mijn sessie is omdat ik de V$NLS_PARAMETERS heb opgevraagd weergave, die me de huidige waarde van de NLS-parameters laat zien.

Zie Hoe u de waarden van de NLS-parameters kunt controleren als u ze moet controleren.

Zie ook Hoe u de datumnotatie van uw sessie kunt wijzigen als u de standaard datum-/tijdnotatie voor uw huidige sessie wilt wijzigen.

Interval

Hier is een voorbeeld dat een intervalwaarde in het standaardformaat uitvoert:

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

Resultaat:

+25-02

De 'nlsparam' Argument

De 'nlsparam' argument specificeert de taal waarin maand- en dagnamen en afkortingen worden geretourneerd. Dit argument kan de volgende vorm hebben:

'NLS_DATE_LANGUAGE = language'

Voorbeeld:

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

Resultaat:

MIÉ, 26 SEPTIEMBRE 2035

Nullargumenten

Doorgeven van null resulteert in null :

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

Resultaat:

null

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Ontbrekend argument

Het aanroepen van de functie zonder argumenten door te geven, resulteert in een fout:

SELECT TO_CHAR()
FROM DUAL;

Resultaat:

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:

Het doorgeven van te veel argumenten resulteert ook in een fout:

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

Resultaat:

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. Gebruik FILE_NAME() om de logische bestandsnaam te retourneren voor een gegeven bestands-ID in SQL Server

  2. Moet ik een rij in een relationele database verwijderen of uitschakelen?

  3. Waarom is 1899-12-30 de nuldatum in Access / SQL Server in plaats van 31-12?

  4. Trigger vs. controlebeperking