Problema:
Desea obtener el número de semana de un valor de fecha o marca de tiempo en una base de datos PostgreSQL.
Ejemplo:
Nuestra base de datos tiene una tabla llamada children
con datos en las columnas id
, first_name
, last_name
y birth_date
.
id | nombre | apellido | fecha_nacimiento |
---|---|---|---|
1 | Ángela | Michelín | 2018-01-01 |
2 | Martín | Jackson | 2002-07-26 |
3 | Justino | Clark | 2010-12-26 |
4 | Franco | Ladrador | 2008-06-08 |
Para cada niño, obtengamos su nombre, apellido y el número de semana de su fecha de nacimiento.
Solución 1:
Usaremos el DATE_PART()
función. Esta es la consulta que escribirías:
SELECT first_name, last_name, DATE_PART('week',birth_date) AS birth_week_number FROM children;
Este es el resultado de la consulta:
nombre | apellido | birth_week_number |
---|---|---|
Ángela | Michelín | 1 |
Martín | Jackson | 30 |
Justino | Clark | 51 |
Franco | Ladrador | 23 |
Discusión:
Usa el DATE_PART()
función para recuperar el número de semana de una fecha en una base de datos PostgreSQL. Esta función toma dos argumentos. El primer argumento es la parte de la fecha a recuperar; usamos 'semana', que devuelve el número de la semana (por ejemplo, "1" para la primera semana de enero, la primera semana del año). Puede usar otra parte de la fecha, como día, año, mes, hora, minuto, doy (el número del día en el año), etc. Puede obtener más información sobre las partes de la fecha en la documentación de PostgreSQL.
El segundo argumento es un nombre de columna del tipo de datos date/timestamp/timestamptz o una expresión que devuelve uno de estos tipos. (En nuestro ejemplo, es una columna de la fecha tipo de datos.)
Cuando se usa con la parte de la fecha de la 'semana', la función DATE_PART()
devuelve el número de la semana como un número entero. En nuestro ejemplo, se muestra el número de la semana correspondiente a la fecha de nacimiento del niño; llamamos a esta columna birth_week_number
. Martin Jackson nació el 2002-07-26
, por lo que la función devuelve '30' como el número de semana de su fecha de nacimiento.
DATE_PART()
no es solo una forma de obtener el número de semana. Otra opción es usar EXTRACT()
función.
Solución 2:
Usaremos el EXTRACT()
función. Esta es la consulta que escribirías:
SELECT first_name, last_name, EXTRACT('week' FROM birth_date) AS birth_week_number FROM children;
Esta función es similar a DATE_PART()
. La diferencia está en la sintaxis:en lugar de una coma entre el nombre de la parte de la fecha y la columna/expresión, está la palabra clave FROM. Además, el EXTRACT()
La función es el estándar SQL. El resultado es el mismo para ambas funciones.