Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como remover os espaços à direita após o nome do mês no Oracle


Se você já usou o TO_CHAR() função para formatar uma data que usa o nome do mês, você deve ter notado que às vezes o mês é retornado com preenchimento à direita.

Isso acontece por padrão quando o nome do mês é menor que o nome do mês mais longo, com base no idioma e no calendário em uso.

Por exemplo, se seu idioma for inglês e o calendário for gregoriano, o nome do mês mais longo será setembro, que tem nove caracteres. Se você retornar o mês de uma data, digamos, março (cinco caracteres), então, por padrão, março terá quatro espaços à direita (5 + 4 =9).

Felizmente, é fácil remover esse preenchimento certo, se necessário. Para remover o preenchimento correto, use o fm modificador de formato.

O problema


Primeiro, aqui está o problema que estamos tentando resolver:
SELECT 
    TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;

Resultado:
08-MARCH    -2030

Podemos ver que há uma grande lacuna entre o nome do mês e o ano. Se não quisermos essa lacuna, podemos usar o fm modificador, como mostrado abaixo.

A solução


Agora vamos a solução:
SELECT 
    TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;

Resultado:
8-MARCH-2030

Agora não há diferença entre o mês e o ano.

Tudo o que fiz foi preceder o modelo de formato com fm .

O fm modificador de formato significa "Modo de preenchimento". Por padrão, o Oracle usa caracteres em branco à direita e zeros à esquerda para preencher os elementos de formato com uma largura constante. A largura é igual à largura de exibição do maior elemento para o modelo de formato relevante. Usando o fm modificador suprime todo esse preenchimento.

Você deve ter notado que o fm modificador também suprimiu o zero à esquerda no número do dia. Se não quisermos isso, podemos colocar o fm modificador na frente do MONTH elemento de formato em vez disso.

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

Resultado:
08-MARCH    -2030

Desta vez, o fm não foi aplicado ao dia, mas foi aplicado ao mês e ao ano.

Se não quisermos suprimir zeros à esquerda do ano, precisamos adicionar outro fm antes do ano.

Aqui está um exemplo que ilustra o que quero dizer:
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   

A primeira coluna usa apenas um fm (na frente de MONTH ).

A segunda coluna usa dois fm modificadores (um na frente de MONTH , e um na frente de YYYY ).