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