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

Como obter o dia do ano de uma data no PostgreSQL

Problema:


Você deseja obter o dia do ano a partir de uma coluna de data ou timestamp no PostgreSQL.

Exemplo:


Nosso banco de dados tem uma tabela chamada software_sale com dados nas colunas id , software e sale_date .
id software data_venda
1 Superjogo X 2019-09-15
2 Navegador X 2019-10-15
3 Notícias DB 26-11-2019
4 MyPaintSoft 2018-10-15
5 Novo SO 2019-10-15

Vamos contar o número de itens de software vendidos por dias do ano. Usaremos isso para descobrir em quais dias do ano (independentemente do ano real) as vendas foram altas ou baixas.

Solução 1:


Usaremos o DATE_PART() função. Aqui está a consulta que você escreveria:
SELECT DATE_PART('doy',sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Segue o resultado da consulta:
day_of_year contagem
258 1
288 3
330 1

Discussão:


Use o PostgreSQL DATE_PART() função para recuperar o número do dia de um ano de uma coluna date/time/datetime/timestamp. Esta função recebe dois argumentos. O primeiro argumento é a parte da data (ou parte da hora) que você deseja que a função retorne. Neste exemplo, estamos usando 'doy ’, que retorna o dia do ano. Você pode usar outras partes, como dia, ano, mês, hora, minuto, semana, etc. Você pode aprender mais na documentação do PostgreSQL.

O segundo argumento é a data/hora/data/hora da qual você deseja extrair a parte de data/hora. Esta pode ser uma expressão que retorna um valor de data/hora/datahora/carimbo de hora ou o nome de uma coluna de data/hora/datahora/hora. (No nosso exemplo, é uma coluna da data tipo de dados.)

A função DATE_PART() com o 'doy ’ identificador retorna o número do dia do ano (de 1 a 365/366) como um inteiro. Em nosso exemplo, o dia do ano da data da venda (do sale_date column) agora é exibido em uma nova coluna, day_of_year . O 15 de outubro foi o 288º dia em 2019 e em 2018; nesse dia, ao longo de dois anos, foram realizadas três vendas (2 em 2019, 1 em 2018).

Usamos o COUNT() função agregada para contar o número de vendas. Esta função recebe um argumento; neste caso, é o número de ID do software. Também precisamos do GROUP BY cláusula nesta consulta para agrupar registros de acordo com o dia do ano. (No nosso exemplo, o argumento real é day_of_year , o alias para DATE_PART('doy',sale_date) .)

Esta não é a única maneira de obter o dia do ano. Também podemos usar o EXTRACT() função.

Solução 2:


Aqui está a consulta que você escreveria com o EXTRACT() função:
SELECT EXTRACT('doy' FROM sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Esta função é semelhante a DATE_PART() . A diferença é que usamos FROM em vez de uma vírgula entre o identificador da parte da data e o argumento de data e hora. O resultado é o mesmo. Nota:EXTRACT() é padrão SQL.