PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Trabalhando com datas no PostgreSQL


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:
  1. o valor que você deseja formatar
  2. 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.