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 ).