sql >> Databasteknik >  >> RDS >> Oracle

Hur man formaterar månaden i romerska siffror i Oracle

Oracle Database ger oss möjligheten att returnera månaden från ett datum med romerska siffror.

Om månaden till exempel är augusti skulle dess decimalvärde vara 08 och dess motsvarighet till romerska siffror skulle vara VIII.

Sättet att göra detta är att använda RM eller rm formatelement i din formatmask. Det kommer att formatera månaden med romerska siffror med versaler respektive gemener.

Att ange datumformat kan göras på flera ställen.

Ange romerska siffror när du anropar en funktion

Här är ett exempel på hur man anger romerska siffror när man formaterar ett datum med TO_CHAR(datetime) funktion:

SELECT TO_CHAR(DATE '2035-08-11', 'DD RM YYYY') FROM DUAL;

Resultat:

11 VIII 2035

I det här fallet angav jag stora romerska siffror.

För att ange gemener, ändra helt enkelt RM till rm :

SELECT TO_CHAR(DATE '2035-08-11', 'DD rm YYYY') FROM DUAL;

Resultat:

11 viii 2035

Se Lista över Datetime Format Elements i Oracle för en fullständig lista över formatelement som kan användas för att formatera datetime-värden.

Ange romerska siffror för hela sessionen

Du kan alternativt ställa in datumformatet för hela din session. Detta kan vara användbart om du behöver göra många funktionsanrop som returnerar datumet.

Det finns tre relevanta parametrar:NLS_DATE_FORMAT , NLS_TIMESTAMP_FORMAT och NLS_TIMESTAMP_TZ_FORMAT .

Dessa parametrar har standardvärden som härleds från NLS_TERRITORY parameter (som har ett standardvärde som är operativsystemberoende). Du kan dock uppdatera någon av dessa parametrar för den aktuella sessionen om det behövs.

Här är ett exempel på hur du uppdaterar dessa parametrar för att använda ett datumformat som inkluderar romerska siffror för månadsdelen:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD RM YYYY';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD RM YYYY HH12:MI:SSXFF AM';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'DD RM YYYY HH12:MI:SSXFF AM TZR';

Resultat:

Session altered.


Session altered.


Session altered.

Nu, när jag anropar en funktion som returnerar ett datum och tid, får jag månaden i romerska siffror.

Exempel:

SELECT TO_CHAR(SYSDATE) FROM DUAL;

Resultat:

10 VIII 2021

Lägg märke till att jag skickade SYSDATE till TO_CHAR() .

Om jag inte gör det, NLS_DATE_FORMAT parametern träder inte i kraft:

SELECT SYSDATE FROM DUAL;

Resultat:

2021-08-10 20:04:49

Det här problemet finns inte med andra datumformat. Jag stötte bara på det med romerska siffror.

En mer permanent lösning

Ovanstående exempel är tillfälliga lösningar för att returnera månaden i romerska siffror. För en mer permanent lösning kan NLS-parametrarna ställas in på databasnivå, i initialiseringsparameterfilen eller i miljövariabler. Se Metoder för att ställa in NLS-parametrar och deras prioriteringar för exempel på dessa, såväl som deras prioritetsordning i förhållande till varandra.


  1. Fel vid laddning av MySQLdb-modul 'Installerade du mysqlclient eller MySQL-python?'

  2. Förbättra prestandan för UDF:er med NULL ON NULL INPUT

  3. MariaDB JSON-funktioner

  4. Hur man testar för överlappande datum i PostgreSQL