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.