sql >> Database teknologi >  >> RDS >> Oracle

Sådan formateres måneden i romertal i Oracle

Oracle Database giver os mulighed for at returnere måneden fra en dato ved hjælp af romertal.

Hvis måneden for eksempel er august, vil dens decimalværdi være 08, og dens romertalsækvivalent vil være VIII.

Måden at gøre dette på er at bruge RM eller rm formatelement i din formatmaske. Det vil formatere måneden ved at bruge romertal med henholdsvis store eller små bogstaver.

Angivelse af datoformat kan gøres flere steder.

Angiv romertal, når du kalder en funktion

Her er et eksempel på angivelse af romertal, når du formaterer en dato med TO_CHAR(datetime) funktion:

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

Resultat:

11 VIII 2035

I dette tilfælde specificerede jeg store romertal.

For at angive små bogstaver skal du blot ændre RM til rm :

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

Resultat:

11 viii 2035

Se Liste over DateTime Format Elements i Oracle for en komplet liste over formatelementer, der kan bruges til at formatere datetime-værdier.

Angiv romertal for hele sessionen

Du kan alternativt indstille datoformatet for hele din session. Dette kan være nyttigt, hvis du skal lave mange funktionskald, der returnerer datoen.

Der er tre relevante parametre:NLS_DATE_FORMAT , NLS_TIMESTAMP_FORMAT og NLS_TIMESTAMP_TZ_FORMAT .

Disse parametre har standardværdier, der er afledt af NLS_TERRITORY parameter (som har en standardværdi, der er operativsystemafhængig). Du kan dog opdatere enhver af disse parametre for den aktuelle session, hvis det kræves.

Her er et eksempel på opdatering af disse parametre til at bruge et datoformat, der inkluderer romertal for månedsdelen:

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 jeg kalder en funktion, der returnerer en datetime-værdi, får jeg måneden i romertal.

Eksempel:

SELECT TO_CHAR(SYSDATE) FROM DUAL;

Resultat:

10 VIII 2021

Bemærk, at jeg har bestået SYSDATE til TO_CHAR() .

Hvis jeg ikke gør det, vil NLS_DATE_FORMAT parameter træder ikke i kraft:

SELECT SYSDATE FROM DUAL;

Resultat:

2021-08-10 20:04:49

Dette problem eksisterer ikke med andre datoformater. Jeg stødte kun på det med romertal.

En mere permanent løsning

Ovenstående eksempler er midlertidige løsninger til at returnere måneden i romertal. For en mere permanent løsning kan NLS-parametrene indstilles på databaseniveau, i initialiseringsparameterfilen eller i miljøvariabler. Se Metoder til indstilling af NLS-parametre og deres prioriteter for eksempler på disse samt deres prioritetsrækkefølge i forhold til hinanden.


  1. MySQL på Azure Performance Benchmark – ScaleGrid vs. Azure Database

  2. Sådan fortæller du, om en beregnet kolonne er deterministisk i SQL Server

  3. MariaDB Connector/Python Beta nu tilgængelig

  4. En simpel brugssag for indekser på primære nøgler