sql >> Base de Datos >  >> RDS >> Oracle

Cómo formatear el mes en números romanos en Oracle

Oracle Database nos brinda la capacidad de devolver el mes a partir de una fecha usando números romanos.

Por ejemplo, si el mes es agosto, su valor decimal sería 08 y su equivalente en número romano sería VIII.

La forma de hacer esto es usar el RM o rm elemento de formato en su máscara de formato. Eso formateará el mes usando números romanos en mayúsculas o minúsculas respectivamente.

La especificación del formato de fecha se puede hacer en varios lugares.

Especificar números romanos al llamar a una función

Este es un ejemplo de cómo especificar números romanos al formatear una fecha con el TO_CHAR(datetime) función:

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

Resultado:

11 viii 2035

En este caso especifiqué números romanos en mayúsculas.

Para especificar minúsculas, simplemente cambie el RM a rm :

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

Resultado:

11 viii 2035

Consulte la Lista de elementos de formato de fecha y hora en Oracle para obtener una lista completa de los elementos de formato que se pueden usar para formatear valores de fecha y hora.

Especificar números romanos para toda la sesión

Alternativamente, puede establecer el formato de fecha para toda su sesión. Esto puede ser útil si necesita hacer muchas llamadas a funciones que devuelven la fecha.

Hay tres parámetros relevantes:NLS_DATE_FORMAT , NLS_TIMESTAMP_FORMAT y NLS_TIMESTAMP_TZ_FORMAT .

Estos parámetros tienen valores predeterminados que se derivan del NLS_TERRITORY parámetro (que tiene un valor predeterminado que depende del sistema operativo). Sin embargo, puede actualizar cualquiera de estos parámetros para la sesión actual si es necesario.

Aquí hay un ejemplo de cómo actualizar estos parámetros para usar un formato de fecha que incluye números romanos para la parte del mes:

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

Resultado:

Session altered.


Session altered.


Session altered.

Ahora, cuando llamo a una función que devuelve un valor de fecha y hora, obtengo el mes en números romanos.

Ejemplo:

SELECT TO_CHAR(SYSDATE) FROM DUAL;

Resultado:

10 VIII 2021

Observe que pasé SYSDATE a TO_CHAR() .

Si no hago eso, el NLS_DATE_FORMAT el parámetro no tiene efecto:

SELECT SYSDATE FROM DUAL;

Resultado:

2021-08-10 20:04:49

Este problema no existe con otros formatos de fecha. Solo lo encontré con números romanos.

Una solución más permanente

Los ejemplos anteriores son soluciones temporales para devolver el mes en números romanos. Para una solución más permanente, los parámetros NLS se pueden establecer en el nivel de la base de datos, en el archivo de parámetros de inicialización o en las variables de entorno. Consulte Métodos de configuración de parámetros NLS y sus prioridades para ver ejemplos de estos, así como su orden de precedencia entre sí.