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.