sql >> Base de Datos >  >> RDS >> Mysql

Ejemplos de SEMANA() – MySQL

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 |
+--------+--------+--------+--------+--------+--------+--------+--------+