Informes semanales en Mysql
A la hora de hacer informes de estadísticas, o de cualquier otro tipo, es bastante común que te pidan mostrar los resultados pertenecientes a una determinada semana. Lo primero que se le ocurre a uno es hacer complicados cálculos para hallar las fechas límite de esa semana y de esta forma conociendo ya el rango de fechas poner una condición tipo Fecha_lunes < Fecha_field < Fecha _viernes
. Pero mirando la referencia de MySQL, en la sección funciones de Fecha y tiempo, de pronto ves la función WEEK() y se te enciende la bombilla, la función WEEK() te devuelve el ordinal de la semana dentro del año para una fecha, de este modo dos fechas que están en la misma semana tienen el mismo número, con este método no tenemos que calcular ninguna fecha y es tan simple como poner la siguiente condición WEEK(Fecha_field) = WEEK(Fecha_semana)
.
Pero ¡OJO!, a la hora de utilizar WEEK() hay que tener en cuenta los siguientes puntos:
- ¿La semana empieza en Domingo o en Lunes? Por omisión en Domingo.
- ¿Se empiezan a contar las semanas desde 0 o desde 1? Por omisión 0.
- Normalmente la primera semana del año es al mismo tiempo la misma que la última del año anterior, si estamos haciendo comparaciones podría resultar problemático, ¿qué se debe devolver 0 o 52? Por omisión se devuelve 0.
Estas 3 cuestiones se pueden configurar, pasando un segundo parámetro a la función:
La siguiente tabla describe cómo funciona el argumento mode
:
Primer día | |||
Modo | de semana | Rango | Semana 1 es la primera semana... |
0 | Domingo | 0-53 | con un domingo en este año |
1 | Lunes | 0-53 | con más de 3 días este año |
2 | Domingo | 1-53 | con un domingo este año |
3 | Lunes | 1-53 | con más de 3 días este año |
4 | Domingo | 0-53 | con más de 3 días este año |
5 | Lunes | 0-53 | con un lunes en este año |
6 | Domingo | 1-53 | con más de 3 días este año |
7 | Lunes | 1-53 | con un lunes en este año |