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

Come formattare il mese in numeri romani in Oracle

Oracle Database ci offre la possibilità di restituire il mese da una data utilizzando numeri romani.

Ad esempio, se il mese è agosto, il suo valore decimale sarebbe 08 e il numero romano equivalente sarebbe VIII.

Il modo per farlo è usare il RM o rm elemento di formato nella maschera di formato. Ciò formatterà il mese utilizzando i numeri romani rispettivamente in maiuscolo o minuscolo.

È possibile specificare il formato della data in diversi punti.

Specifica numeri romani quando si chiama una funzione

Ecco un esempio di come specificare i numeri romani durante la formattazione di una data con il TO_CHAR(datetime) funzione:

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

Risultato:

11 VIII 2035

In questo caso ho specificato numeri romani maiuscoli.

Per specificare il minuscolo, cambia semplicemente il RM a rm :

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

Risultato:

11 viii 2035

Vedi Elenco di elementi di formato DateTime in Oracle per un elenco completo degli elementi di formato che possono essere utilizzati per formattare i valori DateTime.

Specifica i numeri romani per l'intera sessione

In alternativa puoi impostare il formato della data per l'intera sessione. Questo può essere utile se devi eseguire molte chiamate di funzione che restituiscono la data.

Ci sono tre parametri rilevanti:NLS_DATE_FORMAT , NLS_TIMESTAMP_FORMAT e NLS_TIMESTAMP_TZ_FORMAT .

Questi parametri hanno valori predefiniti derivati ​​da NLS_TERRITORY parametro (che ha un valore predefinito che dipende dal sistema operativo). Tuttavia, se necessario, puoi aggiornare uno qualsiasi di questi parametri per la sessione corrente.

Ecco un esempio di aggiornamento di questi parametri per utilizzare un formato data che includa numeri romani per la parte del mese:

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';

Risultato:

Session altered.


Session altered.


Session altered.

Ora, quando chiamo una funzione che restituisce un valore datetime, ottengo il mese in numeri romani.

Esempio:

SELECT TO_CHAR(SYSDATE) FROM DUAL;

Risultato:

10 VIII 2021

Nota che ho passato SYSDATE a TO_CHAR() .

Se non lo faccio, il NLS_DATE_FORMAT parametro non ha effetto:

SELECT SYSDATE FROM DUAL;

Risultato:

2021-08-10 20:04:49

Questo problema non esiste con altri formati di data. L'ho incontrato solo con numeri romani.

Una soluzione più permanente

Gli esempi precedenti sono soluzioni temporanee per restituire il mese in numeri romani. Per una soluzione più permanente, i parametri NLS possono essere impostati a livello di database, nel file dei parametri di inizializzazione o nelle variabili di ambiente. Vedere Metodi di impostazione dei parametri NLS e delle relative priorità per esempi di questi, nonché il loro ordine di precedenza in relazione l'uno con l'altro.