sql >> Database >  >> RDS >> Oracle

Datums opmaken in Oracle

Dit artikel bevat veelvoorkomende voorbeelden van het formatteren van datums in Oracle Database.

Het standaard datumformaat voor uw sessie wordt bepaald door verschillende NLS-initialisatieparameters (hier leest u hoe u ze kunt controleren). U kunt profiteren van deze parameters om lokale opmaak uit te voeren.

U kunt ook functies gebruiken zoals TO_CHAR(number) om datums naar een tekenreeks te converteren en ze meteen precies zo op te maken als u wilt.

Standaard datumnotatie

Wanneer u een datum in Oracle retourneert, wordt deze standaard geretourneerd in de standaard datumnotatie voor de huidige sessie.

Voorbeeld:

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

Resultaat:

10/DEC/30

In dit geval is het standaard datumformaat van mijn sessie DD/MON/RR , en dus weerspiegelt het resultaat dat.

U kunt het formaat wijzigen door ofwel de NLS_TERRITORY parameter (die impliciet andere parameters wijzigt, zoals datetime-parameters), of het wijzigen van de NLS_DATE_FORMAT parameter direct.

Dit gebeurt er als ik de NLS_TERRITORY wijzig parameter naar een ander gebied:

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

Resultaat:

10.12.30

De standaard datumnotatie is bijgewerkt om de notatie voor die landinstelling weer te geven.

Er zijn ook andere datetime NLS-parameters, zoals NLS_TIME_FORMAT , NLS_TIME_TZ_FORMAT , NLS_TIMESTAMP_FORMAT , en NLS_TIMESTAMP_TZ_FORMAT waar u op moet letten bij het wijzigen van datum- en tijdnotaties.

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

De TO_CHAR() Functie

Thij TO_CHAR(datetime) functie accepteert een datetime-waarde en retourneert een tekenreeks die is opgemaakt op een manier die u opgeeft.

Hier is een snel voorbeeld:

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

Resultaat:

Wed, 26 September 2035

Hier retourneerde de functie de datum die was opgegeven in het eerste argument, 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.

Als u geen indeling opgeeft, wordt deze geretourneerd met de standaardindeling voor de sessie.

Bekijk 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.

Hieronder staan ​​meer specifieke voorbeelden.

Retourneer de naam van de dag

Indien nodig kunt u afzonderlijke datumdelen retourneren. U kunt bijvoorbeeld alleen de naam van de dag, alleen de naam van de maand, enz. retourneren. Het enige dat u hoeft te doen, is het toepasselijke formaatelement gebruiken als het enige formaatelement in uw formaatmodel.

Hier is een voorbeeld van het retourneren van de dagnaam:

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

Resultaat:

Wednesday

In dit geval heb ik de volledige dagnaam geretourneerd.

We kunnen Dy . gebruiken zoals in het eerdere voorbeeld om de korte dagnaam te retourneren:

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

Resultaat:

Wed

Retourneer de naam van de maand

Hier is een voorbeeld van het retourneren van de maandnaam:

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

Resultaat:

September

En de korte naam van de maand:

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

Resultaat:

September

Hoofdlettergevoeligheid

In de vorige voorbeelden hebben we de eerste letter voor de dag- en maandnamen met een hoofdletter geschreven.

We kunnen ook alle hoofdletters gebruiken om de namen van de dag en de maand in hoofdletters terug te geven, en alle kleine letters om ze in kleine letters terug te geven.

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;

Resultaat:

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

Taal

De NLS_DATE_LANGUAGE parameter wordt gebruikt om de taal te bepalen van de datumdelen die worden gespeld (zoals dagnamen en maandnamen). De standaardwaarde van deze parameter is afgeleid van de NLS_LANGUAGE parameter.

Hier is een voorbeeld van het bijwerken van de NLS_DATE_LANGUAGE parameter en retourneert vervolgens een geformatteerde datum die de naam van de dag en de maand bevat:

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

Resultaat:

Mié, 26 Septiembre 2035

De taal kan ook expliciet worden gespecificeerd vanuit de TO_CHAR() zelf functioneren. Als u dit doet, kunt u de standaardtaalinstellingen voor de huidige sessie tijdelijk overschrijven, zonder deze instellingen te beïnvloeden.

Voorbeeld:

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

Resultaat:

Mié, 26 Septiembre 2035

In dit voorbeeld heb ik mijn huidige sessie ingesteld om Engels te gebruiken en heb ik vervolgens een query uitgevoerd om een ​​datum in het Spaans uit te voeren.

Zoals eerder vermeld, had het uitvoeren van de datum in het Spaans geen invloed op de Engelse instelling. Om dit aan te tonen, heb ik onmiddellijk daarna de volgende query uitgevoerd (zonder de NLS_DATE_LANGUAGE te wijzigen parameter).

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

Resultaat:

Wed, 26 September 2035

Zoals verwacht is het resultaat in het Engels, de standaardtaal voor de huidige sessie.


  1. 2 manieren om de servernaam in SQL Server (T-SQL) te retourneren

  2. Hoe afbeeldingen op te slaan in een varbinary(max) kolom?

  3. SQLite selecteren

  4. Databasemodellen baseren op de realiteit:de uitdaging van een blogger