En MySQL, puede usar WEEK()
función para obtener el número de semana para una fecha dada. Por "número de semana" me refiero a la semana del año.
Para usar la función, simplemente proporcione la fecha como argumento y se devolverá el número de la semana.
También tiene la opción de especificar si la semana comienza el domingo o el lunes, y si la semana debe estar en el rango de 0 a 53 o de 1 a 53.
Sintaxis
La sintaxis es así:
WEEK(date[,mode])
donde:
date
es la fecha desde la que desea que se devuelva el número de semana.mode
es un número que especifica si la semana debe comenzar el domingo o el lunes y si la semana debe estar en el rango de 0 a 53 o de 1 a 53. Consulte la siguiente tabla para ver los posibles valores de modo.
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT WEEK('2021-01-25') As 'Week Number';
Resultado:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Aquí hay un ejemplo con una fecha cercana a fin de año.
SELECT WEEK('2021-12-25') As 'Week Number';
Resultado:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Ejemplo 2:especificar un modo
Si no especifica un segundo argumento, WEEK()
La función utiliza el modo especificado por default_week_format
variable del sistema. El valor predeterminado de esta variable es 0
.
Sin embargo, también tiene la opción de proporcionar un segundo argumento para especificar qué modo usar. Ejemplo:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Resultado:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
Los valores de modo posibles son los siguientes.
Modo | Primer día de la semana | Rango | La semana 1 es la primera semana... |
---|---|---|---|
0 | domingo | 0-53 | con un domingo en este año |
1 | lunes | 0-53 | con 4 o más días este año |
2 | domingo | 1-53 | con un domingo en este año |
3 | lunes | 1-53 | con 4 o más días este año |
4 | domingo | 0-53 | con 4 o más días este año |
5 | lunes | 0-53 | con un lunes en este año |
6 | domingo | 1-53 | con 4 o más días este año |
7 | lunes | 1-53 | con un lunes en este año |
Para valores de modo donde la semana 1 es la primera semana "con 4 o más días este año", las semanas se numeran de acuerdo con ISO 8601:1988:
- Si la semana que contiene el 1 de enero tiene 4 o más días en el nuevo año, es la semana 1.
- De lo contrario, es la última semana del año anterior y la semana siguiente es la semana 1.
Ejemplo 3:Comparación de modos
Aquí hay una comparación rápida de cómo puede obtener diferentes resultados según el modo que se use.
Los siguientes tres ejemplos usan el mismo código, pero con tres fechas diferentes. Estas fechas son consecutivas:ocurren los días 5, 6 y 7 de enero. Como puede ver, los resultados pueden ser bastante diferentes según la fecha exacta y el modo que se utilice.
Fecha 1
SET @date = '2019-01-05'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Fecha 2
SET @date = '2019-01-06'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Fecha 3
SET @date = '2019-01-07'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+