Um pouco de aritmética com Data/Hora no PostgreSQL

No último post, comentei que para trabalhar corretamente no PostgreSQL, você tem de começar inserindo e exibindo corretamente os seus dados. Agora vamos brincar um pouco de aritmética, dando ênfase ao tipo de dados INTERVAL. Numa comparação entre diversos SGDBs vemos que alguns representantes de peso como MySQL, MS SQL Server não possuem o tipo de dados INTERVAL. O SQLite, que é muito bacana não tem nenhum tipo nativo para trabalhar com datas e o Oracle possui 2 tipos separados para trabalhar com intervalos. Uma bagunça. Só para lembrar, o tipo de dados ‘INTERVAL’ foi padronizado há muito tempo, no SQL 92!

  1. Não é possível somar dois campos do tipo DATE e/ou TIMESTAMP:
  2. A subtração de duas datas é sempre um intervalo:
  3. A soma de um intervalo com uma data é sempre uma data:
  4. A soma de dois intervalos é sempre um intervalo:
  5. Um intervalo pode ser multiplicado por um número inteiro ou de ponto flutuante:
  6. Você pode transformar um intervalo num número extraindo a quantidade de segundos de um intervalo com a função EXTRACT com o parâmetro EPOCH:

Eu sou particularmente fã de intervalos. Muita gente acredita que usando campos numéricos para armazenar intervalos você simplifica as coisas, mas como você pode ver, tudo aqui é bastante direto e reto. Nada de conversões de segundo para hora, de dia para ano. Tudo simples. Se um dia você precisar indexar intervalos ou utilizar intervalos em cálculos mais complexos envolvendo data e hora, você verá que utilizar intervalos é uma estratégia inteligente.

2 comentários sobre “Um pouco de aritmética com Data/Hora no PostgreSQL

Dúvidas, sugestões, críticas, comentários e cervejas são bem vindos!!!