Autor
|
Tema: Rango de fechas a partir del dia de la semana mysql (Leído 5,013 veces)
|
cchianalino
Desconectado
Mensajes: 4
|
Hola a todos es mi primer tema en el foro, voy a intentar ser lo mas claro posible para ver si alguien puede ayudarme. tengo en mi db un campo fecha y necesito filtrar los registros de esa tabla en un rango semanal que va de jueves a jueves.
SELECT* FROM datos WHERE fecha BETWEEN (jueves pasado) AND (jueves proximo)
Con el agregado que si el dia de hoy es jueves debe tomar desde "hoy" hasta el jueves proximo.
Desde ya muchas gracias !!!!
|
|
|
En línea
|
|
|
|
EdePC
|
Saludos, - Mmm, la documentación de MySQL actualizado está incompleta o no le encuentro las sentencias de LOOP - Intenta las siguientes funciones: DELIMITER // DROP FUNCTION IF EXISTS juevesPasado; CREATE FUNCTION juevesPasado() RETURNS DATE BEGIN DECLARE fecha DATE DEFAULT CURRENT_DATE(); WHILE DAYNAME(fecha) <> 'Thursday' DO SET fecha = DATE_SUB(fecha, INTERVAL 1 DAY); END WHILE; RETURN fecha; END // DELIMITER ; DELIMITER // DROP FUNCTION IF EXISTS juevesProximo; CREATE FUNCTION juevesProximo() RETURNS DATE BEGIN DECLARE fecha DATE DEFAULT CURRENT_DATE(); WHILE DAYNAME(fecha) <> 'Thursday' DO SET fecha = DATE_ADD(fecha, INTERVAL 1 DAY); END WHILE; RETURN fecha; END // DELIMITER ; SELECT * FROM datos WHERE fecha BETWEEN juevesPasado() AND juevesProximo();
-- Lo he probado en una base de datos que tengo y funciona XD, me ha dado problema los condenados DELIMITER, he aprendido algo más sobre MySQL ya que yo trabajo más con SQL Server. - Te recomiendo tener a mano el Manual de referencia de MySQL 5, no será la última (MySQL 8) pero está en perfecto español: https://downloads.mysql.com/docs/refman-5.0-es.pdf
|
|
|
En línea
|
|
|
|
cchianalino
Desconectado
Mensajes: 4
|
Hola EdePC, muchisimas gracias ahora lo pruebo y te comento, tambien estoy por probar el siguiente codigo que me ayudaron desde otro foro.
------------------------------------------------------- Puedes usar la función 'CURRENT_DATE()' o 'CURDATE()'; también puedes usar la constante, 'CURRENT_DATE',para conseguir la fecha actual. Puedes usar 'DAYOFWEEK()' para conseguir el día de la semana de la fecha actual como un número, donde 1 representa Domingo y obviamente 7 representaría Sábado. Como Jueves es 5, podemos calcular cuántos días tenemos que restar a la fecha actual para conseguir la fecha del jueves de la semana pasada: -7 + 5 - día. Asimismo, calculamos la fecha del jueves de la siguiente semana: 7 + 5 - día. ------------------------------------------------------ Como decia ahora pruebo ambas y te comento como me fue, gracias !!!!!!
|
|
|
En línea
|
|
|
|
EdePC
|
- Pues me alegra saber que mi código incluye la ayuda que te han comentado e incluso hago mejor uso de la identificación del nombre del día (Thursday = Jueves) y una mejor suma/resta de un día
|
|
|
En línea
|
|
|
|
cchianalino
Desconectado
Mensajes: 4
|
Hola EdePCal final no he podido lograr hacerlo desde mysql (si tome la logica que planteaste y lo realice desde php)
Todos los ";" (salvo del del DELIMITER) me daban error - "caracter inesperado" Al quitarlos, CREATE me da el siguiente mensaje de error - "se econtro una nueva declaracion, pero no hay delimitado entre este y el anterior."
AL incorporar un DELIMITER para separar DROP de CREATE y ejecutar la consulta "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHILE DAYNAME(fecha) <> 'Thursday' DO SET fecha = DATE_SUB(fecha, INTERVAL ' at line 4"
Probe borrando DROP y el error 1064 se repite.
voy a leer más en el manual porque esta claro que algo se me escapa.
----------------------------------------------------------------------------- PHP $juevesPasado = date('Y-m-d'); $dia_fecha = date('l'); while ($dia_fecha != 'Thursday') { //si hoy no es jueves le resto un día a la fecha $juevesPasado = strtotime('-1 day', strtotime($juevesPasado)); $juevesPasado = date('Y-m-d', $juevesPasado); //resto un día al dia de la semana $dia_fecha = strtotime('-1 day', strtotime($juevesPasado)); $dia_fecha = date('l', $juevesPasado); } $juevesProximo = date('Y-m-d'); $dia_fecha_futuro = date('l'); while ($dia_fecha_futuro != 'Thursday') { //si hoy no es jueves le sumo un día a la fecha $juevesProximo = strtotime('+1 day', strtotime($juevesProximo)); $juevesProximo = date('Y-m-d', $juevesProximo); //sumo un día al dia de la semana $dia_fecha_futuro = strtotime('+1 day', strtotime($juevesProximo)); $dia_fecha_futuro = date('l', $juevesProximo); } //si hoy es jueves - $juevesPasado = hoy y $juevesProximo = hoy + 7 dias if ($dia_fecha == 'Thursday') { $juevesPasado = date('Y-m-d'); $juevesProximo = strtotime('+7 day', strtotime($juevesProximo)); $juevesProximo = date('Y-m-d', $juevesProximo); } //consulta mysql $vencimiento_semanal = "SELECT SUM(MONTO) AS vencimiento_semana FROM cheques WHERE FECHA_COBRO BETWEEN '$juevesPasado' AND '$juevesProximo' AND ID_ESTADO = 1 AND ID_TIPO = 1";
fin PHP ------------------------------------------------------- Muchas gracias por la ayuda voy intentar dar con la solucion, me interesa también saber hacerlo desde mysql.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Fechas MySql
PHP
|
Kizar
|
6
|
3,854
|
17 Abril 2007, 00:13 am
por Kizar
|
|
|
[mysql] Consultar mediante rango de fechas en una sola sentencias ?
« 1 2 3 »
PHP
|
Diabliyo
|
22
|
32,869
|
10 Marzo 2011, 22:57 pm
por Diabliyo
|
|
|
Como obtener rango de fechas con JAVA
Java
|
Skarlo
|
0
|
4,113
|
17 Junio 2013, 14:59 pm
por Skarlo
|
|
|
consulta con INTERVAL, fechas en Mysql
Bases de Datos
|
diproxt
|
2
|
3,859
|
31 Marzo 2014, 21:00 pm
por diproxt
|
|
|
Rango de Fechas
Programación General
|
Cayoma
|
2
|
6,120
|
1 Junio 2023, 19:42 pm
por Cayoma
|
|