Translate

quarta-feira, 6 de novembro de 2013

PostgreSql - Formatar data

Serão descritos 2 exemplos de como formatar uma data.

1º Exemplo: exibir a data no formato dd/mm/aaaa (dia/mês/ano):

Solução: vamos utilizar a função to_char para formatar a data.

Na imagem abaixo, vemos a tabela "tb_fornecedor", vamos formatar a data da coluna "data".



Para formatar a data executamos a sentença abaixo:

SELECT 
produto,
quantidade,
valor, 
segmento,
/*Na função to_char utilize primeiro o nome da coluna depois o formato*/
to_char(data, 'DD/MM/YYYY') 
FROM tb_fornecedor;

Após executarmos a sentença, a data foi convertida. Podemos visualizar o resultado na imagem abaixo.



Podemos perceber que a coluna que foi convertida passou a se chamar to_char, nome da função que usamos, caso seja necessário manter o mesmo nome da coluna ou escolher um outro nome podemos colocar "AS nome_da_coluna" após a função 'to_char'. Quando fazemos isso estamos criando um alias para a coluna (apelido). 

SELECT 
produto,
quantidade,
valor, 
segmento,
to_char(data, 'DD/MM/YYY') AS data 
FROM tb_fornecedor;

Após executarmos a sentença, a  coluna 'data' continua se chamando 'data'. Podemos visualizar o resultado na imagem abaixo.


2º Exemplo: exibir a data por extenso. Ao invés de exibir a data como '2013-09-12' queremos exibir como 'Quinta-feira, 12 de setembro de 2013'.



Antes de exibir a data no formato proposto, vamos verificar como a função to_char pode ser utilizada.

SELECT 
data,
/*seleciona o dia*/
to_char(data, 'DD') AS dia,
/*seleciona o dia da semana*/
to_char(data, 'Day') AS dia_sem,
/*seleciona o mes em minusculo*/ 
to_char(data, 'month') AS mes_minusc,
/*seleciona o mes em maiusculo*/ 
to_char(data, 'MONTH') AS mes_maiusc,
/*seleciona o mes com a primeira letra em maiusculo*/ 
to_char(data, 'Month') AS pri_maiusc,
/*seleciona o ano com 4 digitos*/
to_char(data, 'YYYY') AS ano,
/*seleciona o ano com 2 digitos*/
to_char(data, 'YY') AS ano
FROM tb_fornecedor;

Após a execução da sentença acima, podemos visualizar algumas funcionalidades de to_char.



Mas os dados apareceram em inglês. E agora?

Para que as coluna sejam exibidas em português, ou em outro idioma, devemos utilizar o prefixo TM(Translation Mode - Modo de Tradução). O TM converterá o dia e o mês para o padrão local armazenado no lc_time. 
O lc_time que indica como serão exibidas as informações de data e hora. 
Para verificar o lc_time do banco executamos a seguinte sentença:

SHOW lc_time;

Veja o retorno da sentença na imagem abaixo:


Agora que já sabemos o que é TM, vamos utilizá-lo para que os campos da tabela sejam exibidos em português:

SELECT 
data,
/*Seleciona o dia*/
to_char(data, 'DD') AS dia,
/*Seleciona o dia da semana. Idioma em português devido ao prefixo TM*/
to_char(data, 'TMDay') AS dia_sem,
/*Seleciona o mês em minusculo. Idioma em português devido ao prefixo TM*/ 
to_char(data, 'TMmonth') AS mes_minusc,
/*Seleciona mês em maiúsculo. Idioma em português devido ao prefixo TM*/ 
to_char(data, 'TMMONTH') AS mes_maiusc,
/*Seleciona mês com a primeira letra em maiúsculo. Idioma em português devido ao prefixo TM*/ 
to_char(data, 'TMMonth') AS pri_maiusc,
/*Seleciona o ano com 4 digitos*/
to_char(data, 'YYYY') AS ano,
/*Seleciona o ano com 2 digitos*/
to_char(data, 'YY') AS ano
FROM tb_fornecedor;

Após a execução da sentença acima, as colunas serão exibidas em português. Podemos visualizar o resultado da sentença na imagem abaixo.



Agora os dados já aparecem em português, só falta exibirmos no formato que foi proposto no inicio do exemplo. Se você não se lembra mais, vamos relembrar:  a data  '2013-09-12' deverá ser exibida como 'Quinta-feira, 12 de setembro de 2013'.

SELECT 
produto,
quantidade,
valor, 
segmento,
/*Perceba que a preposição "de" está entre aspas duplas para que a função to_char não a converta*/
to_char(data, 'TMDay, DD "de" TMMonth YYYY') AS data
FROM tb_fornecedor;

Após executarmos a sentença a data será exibida no formato esperado. Veja o resultado na imagem abaixo:






  






17 comentários:

  1. Olá. Gostei muito do artigo, mas ao testar aqui no meu banco não funcionou. Atualmente uso o PostgreSQL 8.3. Existe uma versão mínima pra funcionar?

    Obrigado.

    ResponderExcluir
  2. Ajudou muito, muito bom artigo.

    ResponderExcluir
  3. Parabéns pelo post! me ajudou muito obrigado!

    ResponderExcluir
  4. Parabens. me ajudou muito

    ResponderExcluir
  5. Deu aula ! Que show funcionou redondo aqui!

    ResponderExcluir
    Respostas
    1. Fico feliz por ter contribuído.
      Obrigada pela mensagem.

      Excluir
  6. Kelly. Como dizem aqui na empresa quando não entendem uma explicação: "Quer que eu desenhe".
    Você fez isto, desenhou! Muito didático.

    ResponderExcluir
  7. o meu não deu certo assim com essa função "data":
    to_char(data, 'TMDay') AS dia_sem

    mas deu certo assim com a função "current_date":
    select to_char(current_date, 'TMDay') AS dia_sem

    ResponderExcluir
  8. Boas dicas! Testei aqui e funcionou.

    ResponderExcluir