PostgreSql - Adicionar um intervalo a uma data / hora
Tecnologia da Informação

PostgreSql - Adicionar um intervalo a uma data / hora


Vamos mostrar neste artigo, como acrescentar um período a uma data. Descrevemos 5 exemplos:

Caso tenha interesse, faça o download do exemplo, ou veja no GitHub.
1º Exemplo

Os pacientes recebem os resultados dos exames 3 dias após a data do exame. Devemos exibir as datas de entrega dos resultados dos exames. Para calcularmos as datas de entrega vamos utilizar a tabela "tb_exame_paciente". Veja a tabela na imagem abaixo:


Descrição das colunas
Temos duas formas para resolver este exemplo.

1ª Solução

Para acrescentarmos dias a uma data devemos somar um número inteiro.

data + n

Onde n: número de dias

Para exibir as datas de entrega do exame, vamos executar a consulta abaixo:

SELECT
paciente_codigo,
exame_codigo,
exame_data,
exame_data + 3 AS exame_entrega
FROM tb_exame_paciente;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


Caso haja necessidade, formate as datas através do comando to_char. Veja o comando abaixo:

SELECT
paciente_codigo,
exame_codigo,
to_char (exame_data, 'dd/mm/yyyy') AS exame_data,
to_char (exame_data + 3, 'dd/mm/yyyy') AS exame_entrega
FROM tb_exame_paciente;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


Caso queira saber mais sobre formatação de data veja o artigo:
PostgreSql - Formatar data

2ª Solução

Podemos somar um intervalo a data.

 data + inverval 'n período '
Onde:

Para resolver este exemplo vamos utilizar a unidade de tempo days, pois queremos acrescentar dias.

Para exibir as datas de entrega dos exame, vamos executar a consulta abaixo:

SELECT
paciente_codigo,
exame_codigo,
exame_data,
exame_data + interval '3 days' AS exame_entrega
FROM tb_exame_paciente;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


Perceba que quando adicionamos um intervalo a uma data, será retornado além da data a hora (timestamp).

Caso haja necessidade, formate as datas através do comando to_char. Veja o comando abaixo:

SELECT
paciente_codigo,
exame_codigo,
to_char(exame_data, 'dd/mm/yyyy') AS exame_data,
to_char(exame_data + interval 'days' ,'dd/mm/yyyy') AS exame_entrega
FROM tb_exame_paciente;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


2º Exemplo

Os equipamentos de uma fábrica passarão por avaliações a cada 3 meses a partir do início da utilização.
Serão feitas 2 avaliações. Para calcularmos as datas destas avaliações utilizaremos a tabela "tb_equipamentos". Veja a imagem desta tabela a seguir.

Descrição das colunas
Solução

Podemos acrescentar um intervalo a data.

 data + inverval 'n período'

Onde:
Como a manutenção ocorre a cada 3 meses, a 1ª ocorrerá após 3 meses e a 2ª após 6 meses.
Para exibir as datas de manutenção dos equipamentos executamos a consulta abaixo:

SELECT
equipamento_id,
data_inicio,
data_inicio + interval '3 months' AS pri_manutencao,
data_inicio + interval '6 months' AS seg_manutencao
FROM tb_equipamentos;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


Caso haja necessidade, formate as datas através do comando to_char. Veja o comando abaixo:

SELECT
equipamento_id,
to_char(data_inicio, 'dd/mm/yyyy') AS data_inicio,
to_char(data_inicio + interval '3 months', 'dd/mm/yyyy') AS pri_manutencao,
to_char(data_inicio + interval '6 months', 'dd/mm/yyyy') AS seg_manutencao
FROM tb_equipamentos;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.



3º Exemplo

As turmas de uma escola devem fazer 1 teste a cada ano, a partir da data de início das aulas. Serão feitos dois teste. Para calcularmos as datas dos testes utilizaremos a tabela "tb_turma". Veja a imagem desta tabela a seguir.


Descrição das colunas
Solução

Podemos acrescentar um intervalo a data.

 data + inverval 'n período'

Onde:
Como o teste é aplicado a cada ano,  o 1º teste ocorrerá após 1 ano e o 2º teste ocorrerá após 2 anos.

Para exibir as datas dos testes executamos a consulta abaixo:

SELECT
turma_id,
curso_id,
data_inicio,
data_inicio + interval '1 year' AS pri_teste,
data_inicio + interval '2 years' AS seg_teste
FROM tb_turma;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


Caso haja necessidade, formate as datas através do comando to_char. Veja o comando abaixo:

SELECT
turma_id,
curso_id,
to_char(data_inicio, 'dd/mm/yyyy') AS data_inicio,
to_char(data_inicio + interval '1 year',  'dd/mm/yyyy') AS pri_teste,
to_char(data_inicio + interval '2 years', 'dd/mm/yyyy') AS seg_teste
FROM tb_turma;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


4º Exemplo

Uma imobiliária faz contratos locação de imóveis por um período de 2 e 5 meses. Vamos calcular as datas de encerramento dos contratos. Para calcular as datas de encerramento dos contrato vamos utilizar a tabela "tb_locacao". Veja a imagem da tabela tb_locacao seguir.


Descrição das colunas
Solução

Podemos acrescentar um intervalo a data.

 data + inverval 'n período'

Onde:
Para exibir as datas de encerramento dos contratos executamos a consulta abaixo:

SELECT
imovel_id,
cliente_id,
data_inicio_locacao,
data_inicio_locacao + interval '2 years 5 months' AS data_fim_locacao
FROM tb_locacao;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.



Caso haja necessidade, formate as datas através do comando to_char. Veja o comando abaixo:

SELECT
imovel_id,
cliente_id,
to_char (data_inicio_locacao, 'dd/mm/yyyy'),
to_char (data_inicio_locacao + interval '2 year 5 months, 'dd/mm/yyyy') AS data_fim_locacao
FROM tb_locacao;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.

Observação

Perceba que foi adicionado um período de 2 anos e 5 meses (2 years 5 months). Também poderíamos adicionar um período de 29 meses (29 months) que retornaria o mesmo resultado. O objetivo deste exemplo é mostrar que é possível adicionar mais de uma unidade de tempo ao período.

5º Exemplo

Uma lanchonete quer que seja exibida em sua nota fiscal a data e o horário de previsão de entrega.
O prazo de entrega são de 40 minutos após a emissão do pedido.
Para exibir a data de previsão vamos utilizar a tabela "tb_pedido". Veja a tabela na imagem abaixo:


Descrição das colunas
Solução

Podemos acrescentar um intervalo a data e a hora.

 data_e_hora + inverval 'nperíodo'

Onde:
Para exibir a previsão do pedido executamos a consulta abaixo:

SELECT
pedido_codigo,
pedido_data,
pedido_data + interval '40 minutesAS data_entrega
FROM tb_pedido;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


Caso haja necessidade, formate as datas através do comando to_char. Veja o comando abaixo:

SELECT
pedido_codigo,
to_char(pedido_data, 'dd/mm/yyyy hh24:mi:ss') AS pedido_data,
to_char(pedido_data + interval '40 minutes' , 'dd/mm/yyyy hh24:mi:ss') AS data_entrega
FROM tb_pedido;

Após a execução da sentença, será exibido o resultado. Veja na imagem a seguir.


Observação

Repare que utilizamos na mascara, hh24:mi:ss, para o horário, logo as horas serão formatadas no intervalo de (00-24) h, devido ao número 24 que acompanha a hora.
Se utilizarmos o formato a mascara hh:mi:ss, as horas serão formatadas no intervalo de (00-12) h.

Deixe o seu comentário. Suas sugestões ou críticas serão bem-vindas.



loading...

- Postgresql - Função Lag - Diferença De Tempo Para Uma Mesma Coluna
Vamos apresentar 4 exemplos de como calcular a diferença de período para uma mesma coluna. Para isto vamos utilizar a função LAG do PostgreSql. Está função pertence ao grupo das Window Functions e funciona a partir do PostgreSQL 8.4.22 Caso tenha...

- Postgresql - Somar Dias úteis A Uma Data
Vamos mostrar neste artigo, como utilizar a função "adiciona_dias_uteis" que adiciona dias úteis a uma data. Vamos apresentar três exemplos no final do artigo. Não são considerados dias úteis: Sábado ou domingo;Feriados federais: feriados do país...

- Postgresql - Função Count
O artigo apresenta 8 exemplos de como utilizar a função de agrupamento "count", das seguintes formas: COUNT(*);COUNT(nome_da_coluna);COUNT COM GROUP BY;COUNT(DISTINCT(nome_da_coluna)); Caso tenha interesse faça o download dos scripts ou veja no GitHub. ...

- Mysql - Diferença Entre Datas
Neste post vamos apresentar 4 exemplos de como calcular a diferença entre datas. Para calcular a diferença entre duas datas, em dias, utilizamos a função "DATEDIFF". Esta função é utilizada no 1º e 2º exemplos. DATEDIFF (data_final, data_inicial)...

- Postgresql - Diferença Entre Datas
Neste post vamos apresentar 4 exemplos de como calcular a diferença entre datas. Caso tenha interesse, faça o download ou veja o script no Github. Para calcular a diferença entre duas datas, em dias, no postgresql utilizamos o operador aritmético...



Tecnologia da Informação








.