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

Problema con between en procedimiento almacenado

Estas en el tema de Problema con between en procedimiento almacenado en el foro de Mysql en Foros del Web. Buenos dias, le comento mi problema desarrolle un procedimiento almacenado para realizar la busqueda entre fechas en mi base de datos. de esta manera: DELIMITER ...
  #1 (permalink)  
Antiguo 12/06/2012, 06:29
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años
Puntos: 0
Problema con between en procedimiento almacenado

Buenos dias, le comento mi problema desarrolle un procedimiento almacenado para realizar la busqueda entre fechas en mi base de datos. de esta manera:

DELIMITER $$

DROP PROCEDURE IF EXISTS `simae`.`sp_listaReporteTrabajadores`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_listaReporteTrabajadores`(IN fechaInicial DATE, IN fechaFinal DATE, IN dato INT)
BEGIN
SELECT NOMBRE_USUARIO,NOMBRE_PRODUCTO,REFERENCIA_PRODUCTO ,f.FECHA,SUM(CANTIDAD_VENTA) AS cantidad
FROM producto p, factura f, usuario u, factura_cliente fc
WHERE p.COD_PRODUCTO=f.COD_PRODUCTO AND u.COD_USUARIO=fc.COD_USUARIO AND fc.NUMERO_FACTURA=f.NUMERO_FACTURA
AND f.FECHA BETWEEN fechaInicial AND fechaFinal AND NOMBRE_USUARIO LIKE dato
GROUP BY f.COD_PRODUCTO
ORDER BY NOMBRE_USUARIO DESC LIMIT 10;
END$$

DELIMITER ;

El problema esta en que el between al parecer solo funciona si las variables de fecha inicial y final estan entre comillas...

realice una prueba de esta manera y si me devuelve el resultado.

SELECT NOMBRE_USUARIO,NOMBRE_PRODUCTO,REFERENCIA_PRODUCTO ,f.FECHA,SUM(CANTIDAD_VENTA) AS cantidad
FROM producto p, factura f, usuario u, factura_cliente fc
WHERE p.COD_PRODUCTO=f.COD_PRODUCTO AND u.COD_USUARIO=fc.COD_USUARIO AND fc.NUMERO_FACTURA=f.NUMERO_FACTURA
AND f.FECHA BETWEEN '2012-02-12' AND '2012-06-12' AND NOMBRE_USUARIO LIKE '%%'
GROUP BY f.COD_PRODUCTO
ORDER BY NOMBRE_USUARIO DESC LIMIT 10;

Lo que quiero es saber como hacer para que las variables de entrada las detecte como si fueran texto entre comillas asi: 'fechaInicial'

agradezco su ayuda es urgente....
  #2 (permalink)  
Antiguo 12/06/2012, 07:16
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: Problema con between en procedimiento almacenado

No es así, y te lo digo por bastante experiencia con el tema. En tanto las variables locales de las fechas sean DATE o DATETIME, no hay ningún problema, tienen que funcionar, y tengo muchos ejemplos donde lo hacen así, y bien.
Lo que sí puede estar pasando es que cuando llamas al SP, las fechas estén llegando en el formato incorrecto y por tanto se vuelven NULL, o toman un rango inexistente en la base.
La pregunta es, entonces: ¿Con qué lenguaje y cómo estás pasando el parámetro a el SP?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/06/2012, 11:20
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con between en procedimiento almacenado

Gracias amigo por responder, bueno estoy utilizando php y lo llamo de la siguiente manera

CALL sp_listaReporteTrabajadores('2012-01-12','2012-06-12','%%')

te agradezco me des una luz con esto...
  #4 (permalink)  
Antiguo 12/06/2012, 11:33
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: Problema con between en procedimiento almacenado

El error no está en las fechas, sino en el "dato" usado en el LIKE. No puedes poner los comodines dentro de la variable.
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `simae`.`sp_listaReporteTrabajadores`$$
  4.  
  5. CREATE PROCEDURE `sp_listaReporteTrabajadores`(IN fechaInicial DATE, IN fechaFinal DATE, IN dato INT)
  6.     SELECT
  7.         NOMBRE_USUARIO,
  8.         NOMBRE_PRODUCTO,
  9.         REFERENCIA_PRODUCTO,
  10.         f.FECHA,
  11.         SUM(CANTIDAD_VENTA) cantidad
  12.     FROM
  13.         producto p INNER JOIN factura f ON p.COD_PRODUCTO=f.COD_PRODUCTO
  14.         INNER JOIN usuario u ON u.COD_USUARIO=fc.COD_USUARIO
  15.         INNER JOIN factura_cliente fc ON fc.NUMERO_FACTURA=f.NUMERO_FACTURA
  16.     WHERE
  17.         AND f.FECHA BETWEEN fechaInicial AND fechaFinal
  18.         AND NOMBRE_USUARIO LIKE CONCAT('%', dato, '%')
  19.     GROUP BY f.COD_PRODUCTO
  20.     ORDER BY NOMBRE_USUARIO DESC LIMIT 10;
  21. END$$
  22.  
  23. DELIMITER ;
__________________
¿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/2012, 11:43
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con between en procedimiento almacenado

Gracias gnzsoloyo tenias razon el problema estaba en el like...


me salvaste la vida un abrazo...
  #6 (permalink)  
Antiguo 12/06/2012, 11:45
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: Problema con between en procedimiento almacenado

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: procedimiento, select, almacenar
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 14:44.