Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/04/2013, 11:36
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: 17 años, 3 meses
Puntos: 2658
Respuesta: Error con where en fecha

Cita:
Entiendo que si pongo las mismas fechas deberia dar como resultado las cargas del dia?
No exactamente.
Generalmente, cuando sólo indicas la fecha, sin la hora, los DBMS asumen hora cero (00:00:00), porque no tienen ese dato de comparación, ergo, estás consultando un valor que esté entre el 18/04/2013 00:00:00 y el 18/04/2013 00:00:00... Lo cual evidentemente no tiene mucho sentido, si los datos también llevan horas. Y si no las llevan, usar un rango carece de sentido.
Creo que lo que tienes que hacer es considerar que el rango incluya de forma implícita las horas:
Código SQL:
Ver original
  1. AND DATE >= CONVERT(DATETIME, '20130418', 112)
  2. AND DATE < CONVERT(DATETIME, '20130419', 112)
Cita:
no uso el between porque es un sistema ya creado y funciona asi como está,
No se entiende el argumento. Si el funciona como está, no implica que funcione bien. Sólo que funciona...
Si puedes modificar la forma de parametrizar la fecha, bien puedes cambiarla por un BETWEEN, no hay nada que te lo impida, y es probable que ganes en performance.
Dos consultas que apuntan al mismo rango, pero con clausulas diferentes, pueden usar algoritmos internos distintos para obtener el resultado. Eso es algo que se ve solamente con el analizador de consultas.
yo te sugeriría que pruebes ambos casos sobre tu base y veas cuál es la que SQL Server resuelve con mejor método. Y si el campo usado es un DATETIME y está indexado, te sugiero que no uses sólo la fecha, sino que tome también la hora.... Es posible que cambie la solución del analizador.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)