elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Rango de fechas a partir del dia de la semana mysql
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Rango de fechas a partir del dia de la semana mysql  (Leído 5,013 veces)
cchianalino

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Rango de fechas a partir del dia de la semana mysql
« en: 25 Septiembre 2018, 17:31 pm »

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
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Rango de fechas a partir del dia de la semana mysql
« Respuesta #1 en: 25 Septiembre 2018, 23:23 pm »

Saludos,

- Mmm, la documentación de MySQL actualizado está incompleta o no le encuentro las sentencias de LOOP  :xD

- Intenta las siguientes funciones:

Código
  1. DELIMITER //
  2. DROP FUNCTION IF EXISTS juevesPasado;
  3. CREATE FUNCTION juevesPasado() RETURNS DATE
  4. BEGIN
  5.  DECLARE fecha DATE DEFAULT CURRENT_DATE();
  6.  WHILE DAYNAME(fecha) <> 'Thursday' DO
  7.    SET fecha = DATE_SUB(fecha, INTERVAL 1 DAY);
  8.  END WHILE;
  9.  RETURN fecha;
  10. END //
  11. DELIMITER ;
  12.  
  13. DELIMITER //
  14. DROP FUNCTION IF EXISTS juevesProximo;
  15. CREATE FUNCTION juevesProximo() RETURNS DATE
  16. BEGIN
  17.  DECLARE fecha DATE DEFAULT CURRENT_DATE();
  18.  WHILE DAYNAME(fecha) <> 'Thursday' DO
  19.    SET fecha = DATE_ADD(fecha, INTERVAL 1 DAY);
  20.  END WHILE;
  21.  RETURN fecha;
  22. END //
  23. DELIMITER ;
  24.  
  25. 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 Desconectado

Mensajes: 4


Ver Perfil
Re: Rango de fechas a partir del dia de la semana mysql
« Respuesta #2 en: 26 Septiembre 2018, 14:19 pm »

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
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Rango de fechas a partir del dia de la semana mysql
« Respuesta #3 en: 26 Septiembre 2018, 15:14 pm »

- 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  :laugh:
En línea

cchianalino

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Rango de fechas a partir del dia de la semana mysql
« Respuesta #4 en: 27 Septiembre 2018, 06:45 am »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fechas MySql
PHP
Kizar 6 3,854 Último mensaje 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 Último mensaje 10 Marzo 2011, 22:57 pm
por Diabliyo
Como obtener rango de fechas con JAVA
Java
Skarlo 0 4,113 Último mensaje 17 Junio 2013, 14:59 pm
por Skarlo
consulta con INTERVAL, fechas en Mysql
Bases de Datos
diproxt 2 3,859 Último mensaje 31 Marzo 2014, 21:00 pm
por diproxt
Rango de Fechas
Programación General
Cayoma 2 6,120 Último mensaje 1 Junio 2023, 19:42 pm
por Cayoma
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines