Estoy acostumbrado a hacer consultas que extraen datos entre un rango de fechas, es lo de costumbre.
Pero se me ofreció hacer una consulta que filtrara los datos por el día de la semana. Sabía que de seguro hay una forma, solo que no la conocía. Afortunadamente no es muy complicado el asunto.
Día de la semana.
Existe una función dentro del mismo MySQL que nos ayuda a averiguar el día de la semana de una fecha.
A la función DAYOFWEEK se le entrega una fecha y regresa el valor de 1 si es domingo, 2 si es lunes y así hasta llegar a el sábado con el número 7.
Dicho esto, sólo hay que agregar una condición a la cláusula WHERE.
Hice una tabla de ejemplo, que básicamente reúne todas las fechas del mes de Octubre junto con una cantidad.
fechas
fecha | cantidad |
---|---|
2021-10-01 | 101 |
2021-10-02 | 102 |
2021-10-03 | 103 |
2021-10-04 | 104 |
2021-10-05 | 105 |
2021-10-06 | 106 |
2021-10-07 | 107 |
2021-10-08 | 108 |
2021-10-09 | 109 |
2021-10-10 | 110 |
2021-10-11 | 111 |
2021-10-12 | 112 |
2021-10-13 | 113 |
2021-10-14 | 114 |
2021-10-15 | 115 |
2021-10-16 | 116 |
2021-10-17 | 117 |
2021-10-18 | 118 |
2021-10-19 | 119 |
2021-10-20 | 120 |
2021-10-21 | 121 |
2021-10-22 | 122 |
2021-10-23 | 123 |
2021-10-24 | 124 |
2021-10-25 | 125 |
2021-10-26 | 126 |
2021-10-27 | 127 |
2021-10-28 | 128 |
2021-10-29 | 129 |
2021-10-30 | 130 |
2021-10-31 | 131 |
Pero ¿Cuales de estos días ocurrieron el día domingo? pues muy fácil
SELECT * FROM fechas WHERE DAYOFWEEK(fecha)=1 ORDER BY fecha ASC;
fecha | cantidad |
---|---|
2021-10-03 | 103 |
2021-10-10 | 110 |
2021-10-17 | 117 |
2021-10-24 | 124 |
2021-10-31 | 131 |
O los sábados y domingos.
SELECT * FROM fechas WHERE DAYOFWEEK(fecha)=1 OR DAYOFWEEK(fecha)=7 ORDER BY fecha ASC;
La verdad no se cuando voy a volver a utilizar este código, pero lo dejo aquí por si se le ofrece al mí mismo del futuro.
¡Hasta la próxima!
Hola, interesante tu consulta SQL.
una mejora a tu consulta podría ser:
SELECT * FROM fechas
WHERE DAYOFWEEK(fecha) IN (1,7)
ORDER BY fecha ASC;
Y por eso es que publico estas cosas… porque se que siempre se puede mejorar.
Gracias por el tip !!!