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

Cómo eliminar los espacios finales después del nombre del mes en Oracle

Si alguna vez has usado TO_CHAR() para dar formato a una fecha que usa el nombre del mes, es posible que haya notado que a veces el mes se devuelve con el relleno correcto.

Esto sucede de forma predeterminada cuando el nombre del mes es más corto que el nombre del mes más largo, según el idioma y el calendario en uso.

Por ejemplo, si su idioma es inglés y el calendario es gregoriano, el nombre de mes más largo es septiembre, que tiene nueve caracteres. Si devuelve el mes de una fecha y es, por ejemplo, marzo (cinco caracteres), entonces, de forma predeterminada, marzo tendrá cuatro espacios finales (5 + 4 =9).

Afortunadamente, es fácil quitar este relleno derecho si es necesario. Para eliminar el relleno derecho, use el fm modificador de formato.

El problema

Primero, este es el problema que estamos tratando de resolver:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;

Resultado:

08-MARCH    -2030

Podemos ver que hay una gran brecha entre el nombre del mes y el año. Si no queremos esta brecha, podemos usar el fm modificador, como se muestra a continuación.

La solución

Ahora aquí está la solución:

SELECT 
    TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;

Resultado:

8-MARCH-2030

Ahora no hay espacio entre el mes y el año.

Todo lo que hice fue anteponer el modelo de formato con fm .

El fm modificador de formato significa "Modo de relleno". De forma predeterminada, Oracle utiliza caracteres en blanco al final y ceros al principio para llenar elementos de formato a un ancho constante. El ancho es igual al ancho de visualización del elemento más grande para el modelo de formato relevante. Usando el fm El modificador suprime todo ese relleno.

Es posible que haya notado que el fm El modificador también suprimió el cero inicial en el número del día. Si no queremos esto, podemos colocar el fm modificador delante del MONTH elemento de formato en su lugar.

Así:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;

Resultado:

08-MARCH    -2030

Esta vez, el fm no se aplicó al día, pero fue aplicado al mes y al año.

Si no queremos suprimir los ceros iniciales del año, entonces debemos agregar otro fm antes del año.

He aquí un ejemplo que ilustra lo que quiero decir:

SELECT 
    TO_CHAR(date '0030-03-08', 'DD-fmMONTH-YYYY') AS "r1",
    TO_CHAR(date '0030-03-08', 'DD-fmMONTH-fmYYYY') AS "r2"
FROM DUAL;

Resultado:

            r1               r2 
______________ ________________ 
08-MARCH-30    08-MARCH-0030   

La primera columna usa solo un fm (delante de MONTH ).

La segunda columna usa dos fm modificadores (uno delante de MONTH , y uno delante de YYYY ).