sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo obtener el día del año a partir de una fecha en PostgreSQL

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.