Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problemas con between

Estas en el tema de Problemas con between en el foro de Mysql en Foros del Web. Hola,disculpen, tengo un problema, quiero obtener los datos de una fecha elegida hasta el dia de hoy, estoy usand between de esta forma: SELECT A.numPeticion, ...
  #1 (permalink)  
Antiguo 12/06/2009, 15:40
 
Fecha de Ingreso: abril-2009
Ubicación: Lima
Mensajes: 108
Antigüedad: 15 años
Puntos: 0
Problemas con between

Hola,disculpen, tengo un problema, quiero obtener los datos de una fecha elegida hasta el dia de hoy, estoy usand between de esta forma:

SELECT A.numPeticion, A.fecha, P.nombre, P.apepat, P.apemat FROM atencion A, paciente P, historiaClinica H WHERE A.idPaciente = P.idPaciente
AND H.idPaciente = P.idPaciente AND A.fecha BETWEEN '$fecha' AND 'DATE'

me bota 0 registros,cuando deberia botarme 4 registros, sé q mi problema es con la fecha actual " 'DATE()' " tambien lo probe con " 'CURDATE()' " pero igual, como deberia hacerlo.

PD: Antes los hacia con A.fecha >= '$fecha' pero por razones de mi programa ya no puedo usar eso.

AYUDENMEEEEEEEEEEEEEEEEE
  #2 (permalink)  
Antiguo 12/06/2009, 15:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problemas con between

SELECT A.numPeticion, A.fecha, P.nombre, P.apepat, P.apemat FROM atencion A INNER JOIN paciente P ON A.idPaciente = P.idPaciente INNER JOIN historiaClinica H
ON H.idPaciente = P.idPaciente WHERE A.fecha BETWEEN '{$fecha}' AND CURDATE()

No la he probado.
  #3 (permalink)  
Antiguo 12/06/2009, 16:34
 
Fecha de Ingreso: abril-2009
Ubicación: Lima
Mensajes: 108
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con between

Gracias por responder...el problema yo lo tengo acá: A.fecha BETWEEN '$fecha' AND 'DATE' .... lo sé porque cambie el valor de DATE por la fecha actual y me salieron los 4 registros del q hablaba antes, y como habia dicho antes habia probado con DATE y CURDATE y nada...
  #4 (permalink)  
Antiguo 12/06/2009, 17:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas con between

DATE() es una función que convierte un string en una fecha, o bien devuelve la parte de fecha de un DATETIME.
El problema puede ser de lógica:
Si el contenido de la variable de fecha es un DATE, entonces tu sentencia no te devolverá los valores posteriores a la hora 00:00:00 que puedan figurar en el campo A.fecha, por cuanto CURDATE() transformado a DATETIME contiene la hora cero y no el momento actual si es posterior. En ese caso es mejor usar NOW(), que sí te devuelve el DATETIME del momento actual.
Hay que recordar que las funciones de fecha pueden tener comportamientos erráticos dependiendo de la versión de MYSQL usada (3, 4, o 5). Por ello, es mejor usar los tipos de columna correctos, o de lo contrario la migración puede no devolver lo que se espera (la versión 4 contenía muchos bugs respecto de las funciones de fecha).
Yendo al caso, yo probaría:
Código sql:
Ver original
  1. SELECT
  2.     A.numPeticion,  
  3.     A.fecha,  
  4.     P.nombre,  
  5.     P.apepat,  
  6.     P.apemat  
  7. FROM paciente P INNER JOIN historiaClinica H USING(idPaciente)
  8.           INNER JOIN atencion A USING(idPaciente)
  9. WHERE A.fecha BETWEEN '{$fecha}' AND NOW();
Esto debería devolver los registros comprendidos entre la fecha de $fecha y el momento actual del server.
Por otro lado, hay que resolver con lógica la secuencia de tablas: Debes poner las tablas en el mismo orden de llenado verificable y usar LEFT JOIN si una de las tablas puede que no contenga el idPaciente, o de lo contrario no será listado.
Recuerda: El uso del INNER JOIN exige que todas las tablas del FROM contengan el dato de enlace, o sino los registros no aparecerán.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/06/2009, 17:07
 
Fecha de Ingreso: abril-2009
Ubicación: Lima
Mensajes: 108
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con between

waaaaoooo...gracias con eso si funca...XD...gracias gnzsoloyo por echarme la mano y por esa aclaración...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:41.