Introdução
A capacidade de armazenar valores de data dentro de seu banco de dados permite adicionar um elemento de tempo às suas consultas e análise de seus dados. É importante saber como trabalhar com tipos de data em seu respectivo banco de dados para que você possa ser preciso em seus relatórios, sejam informações de pedidos, idades das pessoas ou qualquer outro caso de uso.
Neste guia, discutiremos o armazenamento de
DATE
tipos no PostgreSQL e as várias maneiras de trabalhar com eles. PostgreSQL DATE
tipo de dados
A
DATE
type no PostgreSQL pode armazenar uma data sem um valor de hora associado:DATE
O PostgreSQL usa 4 bytes para armazenar um valor de data. O intervalo de valores para valores de data no PostgreSQL é de 4713 BC a 5874897 AD.
Ao armazenar um valor de data, o PostgreSQL usa o
yyyy-mm-dd
formato, por exemplo 1994-10-27. Este formato também é usado no PostgreSQL para inserção de dados. No PostgreSQL, é possível definir um valor de data padrão da data atual. Isso pode ser feito ao criar sua tabela usando o
DEFAULT
e CURRENT_DATE
palavras-chave. O last_checkout
coluna da nossa tabela de checkouts da biblioteca aceita a data atual por padrão:CREATE TABLE checkouts ( author_id serial PRIMARY KEY, author_name VARCHAR (255) NOT NULL, book_title VARCHAR (255) NOT NULL, published_date DATE NOT NULL, last_checkout DATE NOT NULL DEFAULT CURRENT_DATE);
Seguindo esta estrutura de tabela, podemos inserir dados com o
INSERT INTO
demonstração:INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');
Então, ao consultar os
checkouts
tabela, obtemos o seguinte:SELECT * FROM checkouts; author_id | author_name | book_title | published_date | last_checkout -----------+-------------+------------+----------------+--------------- 1 | James Joyce | Ulysses | 1922-02-02 | 2021-09-27(1 row)
PostgreSQL DATE
funções
Conhecendo os detalhes de
DATE
digite no PostgreSQL, você poderá usar funções que trabalham com as informações armazenadas. Vamos percorrer algumas funções comuns construídas a partir da tabela apresentada na seção anterior. Obter a data atual
No PostgreSQL, você pode obter a data e hora atuais usando o
NOW()
embutido função. A instrução a seguir retornará o dia e a hora:SELECT NOW(); now ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)
Se a hora não for de seu interesse, você também pode especificar para retornar apenas a data com dois pontos
::
para converter um DATETIME
valor para DATE
valor:SELECT NOW()::date; now ------------ 2021-09-27(1 row)
Usando
CURRENT_DATE
é outra maneira de obter a data atual, conforme demonstrado abaixo:SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)
Todas essas três opções retornarão a data no
yyyy-mm-dd
formato. No PostgreSQL, você pode ajustar o formato dessa saída, se desejar. Saiba um valor de data em um formato específico
Para gerar um valor de data em um formato específico, você usa o
TO_CHAR()
função. Esta função aceita dois parâmetros:- o valor que você deseja formatar
- o modelo que define o formato de saída
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy'); to_char ------------ 27/09/2021(1 row)
Você também pode exibir a data em um formato como
Sep 27, 2021
:SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy'); to_char -------------- Sep 27, 2021(1 row)
Dependendo dos requisitos de um sistema, você pode precisar de uma data formatada de uma maneira específica. Este é um cenário em que é útil especificar a saída no PostgreSQL.
Obter o intervalo entre duas datas
PostgreSQL permite que você obtenha o intervalo entre duas datas usando o
-
operador. O uso desse operador permite calcular coisas como a permanência de um funcionário ou o tempo desde a publicação de um livro. Em nosso exemplo, queremos descobrir quantos dias se passaram desde Ulysses de Joyce foi publicado subtraindo a data atual de
published_date
:SELECT author_name, book_title, now()::date - published_date as diffFROM checkouts;
Resultando em:
author_name | book_title | diff -------------+------------+---------------------------- James Joyce | Ulysses | 36397 days (1 row)
Calculando a idade usando valores de data
Podemos continuar com o mesmo exemplo para calcular a idade na data atual em anos, meses e dias usando a função
AGE()
função. A instrução a seguir usa o AGE()
função para calcular a idade de uma publicação da nossa biblioteca checkouts
tabelas:SELECT author_name, book_title, AGE(published_date)FROM checkouts;
Com esta função podemos calcular a idade de um livro em estoque:
author_name | book_title | age -------------+------------+------------------------- James Joyce | Ulysses | 99 years 7 mons 25 days(1 row)
É importante notar que se você passar uma única data para o
AGE()
função, então ele usará automaticamente a data atual para subtrair e calcular. Você também pode passar duas datas para a função para calcular a idade, como:SELECT author_name, book_title, AGE('2000-01-01',published_date),FROM checkouts;
Resultando em:
author_name | book_title | age -------------+------------+-------------------------- James Joyce | Ulysses | 77 years 10 mons 27 days(1 row)
Extrair ano, trimestre, mês, semana ou dia de um valor de data
A última função que vamos abordar é a
EXTRACT()
função no PostgreSQL que permite separar os componentes de data como ano, trimestre, mês e dia. A declaração a seguir extrai o ano, mês e dia da data de publicação de Ulysses :
SELECT author_name, book_title, EXTRACT(YEAR FROM published_date) AS YEAR, EXTRACT(MONTH FROM published_date) AS MONTH, EXTRACT(DAY FROM published_date) AS DAY FROM checkouts;
Os resultados terão a seguinte aparência:
author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce | Ulysses | 1922 | 2 | 2(1 row)
Esta é uma função útil para estar ciente de quando você pode precisar apenas de uma parte de um valor de data para um cálculo com seus dados, por exemplo.
Conclusão
Neste guia, abordamos o básico do que você pode fazer com o
DATE
tipo de dados no PostgreSQL. É importante saber como os dados de data funcionam dentro de seu banco de dados. Ter uma noção das maneiras de acessá-lo e operá-lo permite que você faça cálculos de idade, execute extrações em suas consultas e também configure sua saída, se necessário, para atender aos requisitos de outro sistema.