Tema: Reporte
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/06/2012, 10:15
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Reporte

Mira, técnicamente lo único que necesitas es usar una de las funciones de fecha que MySQL tiene, para restar un día al límite del rango.
Código MySQL:
Ver original
  1. DATE_SUB(fecha, INTERVAL 1 DAY);
Pero eso mismo lo podrías hacer antes de enviar el parámetro en tu programa y el resultado sería el mismo...
De hecho, es mejor dejar que eso lo maneje el programa, y no meterlo en el SP, porque de esa forma el SP mantendría la flexibilidad que de otro modo le quitarías (todas las llamadas siempre te devolverían hasta la fecha anterior al límite).
Fuera de eso, no hay impedimentos.

Ahora bien, a mi me intriga una cosa: ¿Por qué usas DATE_FORMAT()?
Código MySQL:
Ver original
  1. date_format(fecha, '%Y/%m/%d') between date_format(pFechaFinal,'%Y/%m/01') and   date_format(pFechaFinal,'%Y/%m/%d')
Si ya tienes la fecha como un DATE o DATETIME (el DATE_FRMAT() no sirve con otros campos), ¿por qué razón quieres transformar eso en una cadena de texto, que bien te pede producir resultados erróneos?

¿Me lo puedes aclarar?


Por cierto: si el código es numérico, no deberías compararlo como cadena de texto. Eso puede reducir a performace por generar cantidades ingentes de conversiones implícitas, que no se necesitan:
Código MySQL:
Ver original
  1. articulo.codigo='4000' or articulo.codigo='5000'
contra
Código MySQL:
Ver original
  1. articulo.codigo=4000 or articulo.codigo=5000
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)