Hilo
Consulta mysql (Carlos Chianalino) 2018-09-25 16:14:42
Hola a todos es mi primer mail en la lista, espero este activa aun.
Necesito si alguien puede ayudarme con esto.
tengo una bd en myslq en una de las tablas registros documentos con campo
fecha y necesito hacer una consulta a la tabla con el siguiente formato
SELECT* FROM documentos WHERE fecha BETWEEN (jueves pasado) AND (jueves
proximo).
desde ya muchas gracias !
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Re: Consulta mysql (Francisco José Caneda Iglesias) 2018-09-25 19:02:51
Prueba a poner las fechas en formato YYYY-MM-DD
por ejemplo:
SELECT * FROM `usuarios` WHERE fecha BETWEEN '2016-03-20' AND '2016-20-31'
El mar., 25 sept. 2018 a las 18:48, Carlos Chianalino (<
cchianalino@gmail.com> ) escribió:
> Hola a todos es mi primer mail en la lista, espero este activa aun.
> Necesito si alguien puede ayudarme con esto.
> tengo una bd en myslq en una de las tablas registros documentos con campo
> fecha y necesito hacer una consulta a la tabla con el siguiente formato
>
> SELECT* FROM documentos WHERE fecha BETWEEN (jueves pasado) AND (jueves
> proximo).
>
> desde ya muchas gracias !
>
> _______________________________________________
> Lista de correo Cconclase Cconclase@listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Re: Consulta mysql (Steven Davidson) 2018-09-25 21:23:28
Hola Carlos,
Ante todo, bienvenido a la lista de correo-e.
Si sabes las fechas exactas entre ambos jueves, entonces Francisco José te
ha dado la respuesta correcta. Sin embargo, si quieres saber los jueves con
respecto a la fecha actual, cuando realices la consulta, entonces necesitas
construir las cotas inferior y superior para describir el intervalo.
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.
Espero que esto te sirva.
Steven
On Tue, Sep 25, 2018 at 12:46 PM Carlos Chianalino <cchianalino@gmail.com>
wrote:
> Hola a todos es mi primer mail en la lista, espero este activa aun.
> Necesito si alguien puede ayudarme con esto.
> tengo una bd en myslq en una de las tablas registros documentos con campo
> fecha y necesito hacer una consulta a la tabla con el siguiente formato
>
> SELECT* FROM documentos WHERE fecha BETWEEN (jueves pasado) AND (jueves
> proximo).
>
> desde ya muchas gracias !
>
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Re: Consulta mysql (Carlos Chianalino) 2018-09-26 12:16:21
Hola antes que nada muchas gracias a ambos !!!! En realidad lo que
necesitaba es lo que me comenta steven que voy a empezar a probarlo en
cuanto termine de redactar este mail ! porque el dato que yo tengo o desde
donde parto es el dia en el que estoy parado, no importa que dia de la
semana sea yo necesito obtener datos desde el jueves anterior al jueves
proximo y si hoy es jueves, desde hoy hasta el jueves proximo asi que ahora
pruebo como me dice steven y les comento.
Muchas gracias !!!!
El mar., 25 sept. 2018 a las 18:26, Davidson, Steven (<srd4121@njit.edu>)
escribió:
> Hola Carlos,
>
> Ante todo, bienvenido a la lista de correo-e.
>
> Si sabes las fechas exactas entre ambos jueves, entonces Francisco José te
> ha dado la respuesta correcta. Sin embargo, si quieres saber los jueves con
> respecto a la fecha actual, cuando realices la consulta, entonces necesitas
> construir las cotas inferior y superior para describir el intervalo.
>
> 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.
>
> Espero que esto te sirva.
>
> Steven
>
>
> On Tue, Sep 25, 2018 at 12:46 PM Carlos Chianalino <cchianalino@gmail.com>
> wrote:
>
>> Hola a todos es mi primer mail en la lista, espero este activa aun.
>> Necesito si alguien puede ayudarme con esto.
>> tengo una bd en myslq en una de las tablas registros documentos con campo
>> fecha y necesito hacer una consulta a la tabla con el siguiente formato
>>
>> SELECT* FROM documentos WHERE fecha BETWEEN (jueves pasado) AND (jueves
>> proximo).
>>
>> desde ya muchas gracias !
>>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase@listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Re: Consulta mysql (Carlos Chianalino) 2018-09-27 04:53:57
Hola a todos actualizo como segui con esto, en otro fore alguien me ayudo
tambien con el siguiente codigo que comparto
-------------------------------------------------
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();
-------------------------------
yo lo probe y no pude hacerlo funcionar, si tome su logica y lo aplique
desde PHP asi que les dejo lo que le comente al usuario que me ayudo en el
foro y el codigo PHP que utilice.
------------------------------
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.
----------------------------------------------------------------------------------
Steven muchas gracias al igual que Francisco José por su tiempo !
El mar., 25 sept. 2018 a las 18:26, Davidson, Steven (<srd4121@njit.edu>)
escribió:
> Hola Carlos,
>
> Ante todo, bienvenido a la lista de correo-e.
>
> Si sabes las fechas exactas entre ambos jueves, entonces Francisco José te
> ha dado la respuesta correcta. Sin embargo, si quieres saber los jueves con
> respecto a la fecha actual, cuando realices la consulta, entonces necesitas
> construir las cotas inferior y superior para describir el intervalo.
>
> 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.
>
> Espero que esto te sirva.
>
> Steven
>
>
> On Tue, Sep 25, 2018 at 12:46 PM Carlos Chianalino <cchianalino@gmail.com>
> wrote:
>
>> Hola a todos es mi primer mail en la lista, espero este activa aun.
>> Necesito si alguien puede ayudarme con esto.
>> tengo una bd en myslq en una de las tablas registros documentos con campo
>> fecha y necesito hacer una consulta a la tabla con el siguiente formato
>>
>> SELECT* FROM documentos WHERE fecha BETWEEN (jueves pasado) AND (jueves
>> proximo).
>>
>> desde ya muchas gracias !
>>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase@listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Re: Consulta mysql (Salvador Pozo) 2018-09-27 09:59:54
El pasado 2018-09-27 04:53:57, Carlos Chianalino escribió:
CC> Hola a todos actualizo como segui con esto, en otro fore alguien me ayudo
CC> tambien con el siguiente codigo que comparto
Hola:
He intentado ejecutar estos ejemplos desde la consola de PHPMyAdmin, y obtengo errores similares a los que obtienes tu. Sin embargo, si los ejecuto desde la consola de MySQL funcionan perfectamente. No sé si ese es tu caso también.
Por lo que veo, PHPMyAdmin no ejecuta las consultas de forma atómica, de modo que las sentencias "DELIMITER" se pierden después de ejecutarlas.
Si envías la consulta que define cada función desde PHP debería funcionar, lo probaré a ver...
Yo optimizaría algo más los ejemplos que te han dado, ya que usar la función DAYNAME me parece más complicado, y prefiero evitar bucles siempre que es posible:
----8<-----
DELIMITER //
DROP FUNCTION IF EXISTS juevesPasado;
CREATE FUNCTION juevesPasado() RETURNS DATE
BEGIN
DECLARE fecha DATE DEFAULT CURRENT_DATE();
SET fecha = DATE_SUB(fecha, INTERVAL DAYOFWEEK(fecha) - 5 DAY);
RETURN fecha;
END //
DELIMITER ;
----8<-----
DAYOFWEEK devuelve un entero, en el que 0 indica que la fecha corresponde a un domingo, y sucesivamente. Para el jueves corresponde el valor 5.
Para obtener la fecha del jueves pasado basta con restar el valor del día de la semana para la fecha dada menos cinco.
Por ejemplo, como hoy, 27 de septiembre, es jueves, DAYOFWEEK devuelve 5. De modo que la la fecha actual le restaremos 5-5 días, es decir, nada.
De modo análogo:
----8<-----
DELIMITER //
DROP FUNCTION IF EXISTS juevesProximo;
CREATE FUNCTION juevesProximo() RETURNS DATE
BEGIN
DECLARE fecha DATE DEFAULT CURRENT_DATE();
SET fecha = DATE_ADD(fecha, INTERVAL 2 + DAYOFWEEK(fecha) DAY);
RETURN fecha;
END //
DELIMITER ;
----8<-----
Para calcular el próximo jueves le tendremos que sumar 7-5 + DAYOFWEEK.
Al igual que planteas en tu mensaje, si las consultas se van a lanzar desde un programa PHP, yo también optaría por calcular los valores de las fechas usando funciones PHP, de ese modo evitamos que el trabajo lo haga el motor de la base de datos, pero eso son manías mías.
En este caso también es preferible evitar bucles (aunque como mucho se repitan 6 veces, siempre es preferible hacerlo directamente, si se puede).
Mi opción sería algo como esto:
----8<----- PHP
$jPasado = new DateTime();
$jProximo = new DateTime();
$jPasado-> sub(new DateInterval('P'.(date('w')-4).'D'));
$jProximo-> add(new DateInterval('P'.(date('w')+3).'D'));
$juevesPasado = $jPasado-> format('Y-m-d');
$juevesProximo = $jProximo-> format('Y-m-d');
----8<-----
Hasta pronto.
--
Salvador Pozo (Administrador)
mailto:salvador@conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ