Problema:
Desea obtener el día del año a partir de una fecha o una columna de marca de tiempo en PostgreSQL.
Ejemplo:
Nuestra base de datos tiene una tabla llamada software_sale
con datos en las columnas id
, software
y sale_date
.
id | software | fecha_de_venta |
---|---|---|
1 | Superjuego X | 2019-09-15 |
2 | Navegador X | 2019-10-15 |
3 | Noticias de DB | 2019-11-26 |
4 | MyPaintSoft | 2018-10-15 |
5 | Nuevo sistema operativo | 2019-10-15 |
Contemos el número de artículos de software vendidos por días del año. Usaremos esto para averiguar qué días del año (independientemente del año real) las ventas fueron altas o bajas.
Solución 1:
Usaremos el DATE_PART()
función. Esta es la consulta que escribirías:
SELECT DATE_PART('doy',sale_date) AS day_of_year, COUNT(id) as count FROM software_sale GROUP BY day_of_year;
Este es el resultado de la consulta:
día_del_año | contar |
---|---|
258 | 1 |
288 | 3 |
330 | 1 |
Discusión:
Use PostgreSQL DATE_PART()
función para recuperar el número del día de un año de una columna de fecha/hora/fechahora/marca de tiempo. Esta función toma dos argumentos. El primer argumento es la parte de la fecha (o parte de la hora) que desea que devuelva la función. En este ejemplo, estamos usando 'doy
', que devuelve el día del año. Puede usar otras partes, como día, año, mes, hora, minuto, semana, etc. Puede obtener más información en la documentación de PostgreSQL.
El segundo argumento es la fecha/hora/fechahora/marca de tiempo de la que desea extraer la parte de fecha/hora. Puede ser una expresión que devuelva un valor de fecha/hora/fechahora/marca de tiempo o el nombre de una columna de fecha/hora/fechahora/marca de tiempo. (En nuestro ejemplo, es una columna de la fecha tipo de datos.)
La función DATE_PART()
con el 'doy
El identificador devuelve el número del día del año (de 1 a 365/366) como un número entero. En nuestro ejemplo, el día del año de la fecha de venta (del sale_date
column) ahora se muestra en una nueva columna, day_of_year
. El 15 de octubre fue el día 288 en 2019 y en 2018; ese día durante dos años se realizaron un total de tres ventas (2 en 2019, 1 en 2018).
Usamos el COUNT()
función agregada para contar el número de ventas. Esta función toma un argumento; en este caso, es el número de identificación del software. También necesitamos el GROUP BY
cláusula en esta consulta para agrupar registros según el día del año. (En nuestro ejemplo, el argumento real es day_of_year
, el alias para DATE_PART('doy',sale_date)
.)
Esta no es la única manera de obtener el día del año. También podemos usar el EXTRACT()
función.
Solución 2:
Esta es la consulta que escribirías con EXTRACT()
función:
SELECT EXTRACT('doy' FROM sale_date) AS day_of_year, COUNT(id) as count FROM software_sale GROUP BY day_of_year;
Esta función es similar a DATE_PART()
. La diferencia es que usamos FROM en lugar de una coma entre el identificador de la parte de fecha y el argumento de fecha y hora. El resultado es el mismo. Nota:EXTRACT()
es el estándar SQL.