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

Problemas con BETWEEN !!!!

Estas en el tema de Problemas con BETWEEN !!!! en el foro de SQL Server en Foros del Web. Saludos a todo el foro. Tengo un stored procedure que me da los registros de una tabla "X" pero el usuario puede especificar el rango ...
  #1 (permalink)  
Antiguo 29/10/2007, 11:01
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta Problemas con BETWEEN !!!!

Saludos a todo el foro.

Tengo un stored procedure que me da los registros de una tabla "X" pero el usuario puede especificar el rango de fechas para que le muestre los datos, es decir si desea seleccionar la visualización de toda la información de ventas entre el 06 de enero de 1999, y el 10 de enero de 1999, en la Tabla "X".

El problema es cuando las fechas quedan comprendidas de la sig. manera

Fecha_ini = '2007/08/01'
Fecha_fin = '2007/08/31'

Ya que el total de registros que me devuelve entre estas fechas es de 25, cuando compruebo esto directamente en la tabla son 27 registros entre dichas fechas, lo que note es que los registros que no toma en cuenta son los que estan registrados el ultimo dia de cada mes, en este caso tengo 2 registros que fueron capturados el dia 31 de AGOSTO del 2007 y son los faltantes en el resultado del stored procedure.

Esta misma prueba la realice para todos los meses y hace lo mismo, si el ultimo dia de cada mes hay registros BETWEEN no los toma en cuenta, por que ???????

Mi consulta tiene la estructura sig:

SELECT *
FROM X
WHERE Date BETWEEN Fecha_ini AND Fecha_fin
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #2 (permalink)  
Antiguo 29/10/2007, 12:33
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Solucion facil, NO UTILICES BETWEEN con fechas

SELECT *
FROM X
WHERE Date >= Fecha_ini AND Date <= Fecha_fin
  #3 (permalink)  
Antiguo 29/10/2007, 17:21
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Problemas con BETWEEN !!!!

Muchas gracias por la sugerencia iislas pero lo solucione de la sig. manera por si a alguien le sirve.

SELECT *
FROM X
WHERE Date BETWEEN Fecha_ini AND (Fecha_fin+1)
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #4 (permalink)  
Antiguo 29/10/2007, 17:41
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Insisto, kire94, para el manejo de fechas, existe una MEJOR PRACTICA de NO utilizar BETWEEN.

Pero bueno, tu decides al final.
  #5 (permalink)  
Antiguo 03/11/2007, 17:01
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Problemas con BETWEEN !!!!

BETWEEN funciona bien, siempre y cuando entiendas las implicaciones. Lo cual creo que a kire le sucedería incluso usando >= y <=

El asunto es que seguramente el campo de fecha tiene la hora incluída, mientras que él intenta comparar sin considerar la hora. SQL Server convierte cualquier fecha sin hora en su correspondiente a las 00:00, por lo que 2007-08-31 internamente se convierte en 2007-08-31 00:00:000 y eso es por consecuencia menor que 2007-08-31 05:35:250 que es lo que el creo que tiene en sus campos.

Un simple convert se encarga de resolverlo:

WHERE Convert(Char(10), Date, 120) BETWEEN Fecha_ini AND Fecha_fin
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #6 (permalink)  
Antiguo 04/11/2007, 09:38
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Problemas con BETWEEN !!!!

Coincido mi estimado Mithrandir..... ese es el problema en cuestion.... otra solucion es que a las entradas le añadas tu los valores de horas.

Ejemplo:

Código:
SELECT *
FROM X
WHERE Date BETWEEN '20070801 00:00:00.000' AND '2007/08/31 23:59:59.999'

Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #7 (permalink)  
Antiguo 05/11/2007, 12:58
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Mithrandir:

¿Estas de acuerdo que por cada registro debe hacer un CONVERT de la fecha?

Habria que ver el plan de ejecucion con una buena cantidad de registros, ya que tendria que convertir TODOS.
  #8 (permalink)  
Antiguo 05/11/2007, 15:42
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Problemas con BETWEEN !!!!

No creo que sea muy relevante, la funcion convert no es nada pesada....


Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #9 (permalink)  
Antiguo 05/11/2007, 18:53
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Bueno, no tengo los registros, pero me gustaria probarla con unos 5 MILLONES de ellos, veras que cuando haces un WHERE CONVERT(COLUMNA) = , te hara el convert de los 5 millones y sobre todo, NO UTILIZA LOS INDICES.

¿Que opinas?
  #10 (permalink)  
Antiguo 05/11/2007, 21:34
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Problemas con BETWEEN !!!!

Tengo una funcion de BD, que lo que hace es instanciar un objeto de VB60, para convertir un texto cifrado y poderse leer, esta conversion la hace con toda la BD de empleados en la empresa donde trabajo (90,000 empleados) y solo le cuesta 16 Segundos.... Se que no son los 5 millones de registros, pero...

1.- ¿Quien en su sano jucion leería 5 millones de registros?
2.- 90,000 ya es algo ¿no?


Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #11 (permalink)  
Antiguo 06/11/2007, 11:31
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Gabo77

No es que estes en tu sano juicio y "que los quieras leer", eso me queda claro, pero estoy hablando de un caso REAL, no es inventado.

En un proyecto que estuve trabajando hace un año (concursos por TV abierta), se recibian 450 mil registros por cada 15 minutos (mas o menos), durante 5 horas, los fines de semana, digamos que al final del concurso, logramos, en un dia (domingo), juntar en 5 horas, 3.5 millones de llamadas (registros).

Al final del evento, se llegaron a contabilizar 20 millones de llamadas, todo un record para el evento.

De esa informacion, habia que sacar ESTADISTICOS, REPORTES, ETC. en linea (habia que informar como iba el sorteo) y de forma historica.

Cuando quise hacer algo como lo que aqui se propone (generar los estadisticos), mi proceso duraba 15 HORAS (QUINCE HORAS) y muchas veces tronaba por cualquier razon, todo con servidores dedicados exclusivamente para esta operacion.

Alguien (Lilina Sorrentino, Argentina) en su "sano juicio", me hizo ver MI ERROR en no utilizar las fechas como se debe hacer, ademas de cuando utilizas CONVERT(columna), debera recorrer UNA POR UNA cada columna para realizar dicho convert, sin hacer uso de los INDICES, no es que "quieras no no quieras hacerlo", simplemente DEBE HACERLO para realizar el filtrado.

El proceso, despues de sus recomendaciones, se pudo realizar en menos de 5 minutos, que fue excelente ayuda para mi.

Pero bueno, no es mi idea de "polemizar" si estamos o no en "nuestro sano juicio", simplemente es comentar sobre las experiencias pasadas y compartirlas con todo el grupo.
  #12 (permalink)  
Antiguo 06/11/2007, 16:19
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Y yo presumiendo mis 20 millones de registros, hoy me encontre esta posta en otro foro:

Cita:
hola buenas tardes,

tengo un problema con una base de datos, pasa lo siguiente a la base de datos se envio sun insert por año donde cada año tenia alrededor de 80 millones de registros en total la tabla tenia aproxiamadamente 240 millones de registros

al aprecer el log se lleno mientras estaba haciendo la actualizacion de uno de los años. al parecer se daño la base de datos es posible que un log lleno dañe los datos q estaban en la base de datos . hasta donde tengo entendido no ? y si es asi que se uede hacer para restaurar la base de datos antes del insert
  #13 (permalink)  
Antiguo 06/11/2007, 19:26
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Problemas con BETWEEN !!!!

uhm.... al decir quien leeria? me limite a pensar en la representación de los datos, no en una consulta donde debes realizar un calculo con el total de datos de la tabla.... te doy un tip..... cuando me pasa esto, normalmete procuro que la BD resuelva los filtros que no requieren conversiones o cosas extrañas (y primero por indices, claro está), luego ya le pido resolver todo lo demás que se que le puede cargar al proceso, como conversiones, cases, funciones, etc.... así el set de resultados a los que debe aplicar esto no es al universo total, sino que ya viene previamente filtrado.... no se si esto aplique en tu caso, pero a mi el 100% de las veces me da mucho mejores resultados :p

Como sea, coincido contigo, no hagamos dramas de esto, finalmente uno resuelve las cosas a como mejor le funcionen, y hay muchas variables de por medio.


Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #14 (permalink)  
Antiguo 07/11/2007, 11:43
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Lo que en mi caso lo resolvio, fue la correcta ulilizacion de los campos DATETIME.

Y te doy la razon, hoy en dia, la explotacion de informacion se la estamos dejando a los CUBOS de informacion (mineria de datos) .

Saludos.
  #15 (permalink)  
Antiguo 19/11/2007, 15:09
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Problemas con BETWEEN !!!!

Cita:
Iniciado por iislas Ver Mensaje
Mithrandir:

¿Estas de acuerdo que por cada registro debe hacer un CONVERT de la fecha?

Habria que ver el plan de ejecucion con una buena cantidad de registros, ya que tendria que convertir TODOS.
Sí, y no solo eso. Cuando aplicas funciones al campo el índice no se utiliza y se opta por el table scan (pensando en que exista un índice sobre ese campo). Este tipo de soluciones no deben ser utilizadas en tablas grandes y hay que complicarsela del lado de las variables para dejar el campo intacto.

EDIT: Más adelante vi que ya se menciona lo de los índices, así que no he dicho nada

Por cierto... los cubos son una maravilla para procesar grandes volúmenes de información, pero las herramientas de presentación son carísimas. Yo tengo que conformarme con Office Web Components porque otro tipo de herramientas se salen del presupuesto :-\

¿Que usas tu?
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche

Última edición por Mithrandir; 19/11/2007 a las 15:15
  #16 (permalink)  
Antiguo 19/11/2007, 16:40
 
Fecha de Ingreso: octubre-2007
Ubicación: Guatemala
Mensajes: 7
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Problemas con BETWEEN !!!!

Lo que puedes hacer es tomar la fecha y encerrarla en parentesis para que tome el valor como que si fuera un campo string y tome el valor para buscarlo
  #17 (permalink)  
Antiguo 20/11/2007, 18:24
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problemas con BETWEEN !!!!

Si la pregunta "¿Que usas tu?", es para mi.

COGNOS
  #18 (permalink)  
Antiguo 25/11/2007, 12:43
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Problemas con BETWEEN !!!!

Cita:
Iniciado por iislas Ver Mensaje
Si la pregunta "¿Que usas tu?", es para mi.

COGNOS
Yep, era para ti. Algo así imaginaba, lástima que acá no tenga presupuesto asignado en esas áreas.

Por cierto... a ver como te va ahora que Cognos es parte de IBM. Espero que no arruinen el producto.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #19 (permalink)  
Antiguo 03/03/2011, 21:13
 
Fecha de Ingreso: noviembre-2009
Mensajes: 13
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Re: Problemas con BETWEEN !!!!

amigo tengo un problema parecido usando between en este caso el usuario puede seleccionar la rango de fechas q quiera visualizar mi problema es que me muestra los registros del rango seleccionado pro luego al final tambien memuestra los de los meses pasado que solucion podrian darme

select:
$queEmp = "SELECT positivas.fecha1,positivas.cedula,verificacion_con ducta.cedula,verificacion_conducta.nombre
FROM
positivas,verificacion_conducta
WHERE
verificacion_conducta.cedula=positivas.cedula
AND
positivas.tipo='P'
AND
codigo_empresa ='".$_POST['codigo_compañia']."'
AND
fecha1 between '".$_POST['fecha1']."'
AND
'".$_POST['fecha2']."'
ORDER BY
fecha1 ASC";
  #20 (permalink)  
Antiguo 03/03/2011, 21:19
 
Fecha de Ingreso: noviembre-2009
Mensajes: 13
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Re: Problemas con BETWEEN !!!!

Cita:
Iniciado por iislas Ver Mensaje
Solucion facil, NO UTILICES BETWEEN con fechas

SELECT *
FROM X
WHERE Date >= Fecha_ini AND Date <= Fecha_fin
amigo tengo un problema parecido usando between en este caso el usuario puede seleccionar la rango de fechas q quiera visualizar mi problema es que me muestra los registros del rango seleccionado pro luego al final tambien memuestra los de los meses pasado que solucion podrian darme

select:
$queEmp = "SELECT positivas.fecha1,positivas.cedula,verificacion_con ducta.cedula,verificacion_conducta.nombre
FROM
positivas,verificacion_conducta
WHERE
verificacion_conducta.cedula=positivas.cedula
AND
positivas.tipo='P'
AND
codigo_empresa ='".$_POST['codigo_compañia']."'
AND
fecha1 between '".$_POST['fecha1']."'
AND
'".$_POST['fecha2']."'
ORDER BY
fecha1 ASC";
  #21 (permalink)  
Antiguo 06/03/2011, 08:03
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Problemas con BETWEEN !!!!

Prueba conviertiendo tus fechas al formato YYYYMMDD
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #22 (permalink)  
Antiguo 28/04/2011, 13:06
 
Fecha de Ingreso: julio-2009
Mensajes: 29
Antigüedad: 14 años, 9 meses
Puntos: 1
Pregunta Problemas con BETWEEN !!!!

Yo tengo un problema similar... En una aplicacion que estoy haciendo en vb.net, utilizando MySQL, tengo la siguiente consulta:

Cita:
SELECT * FROM vistaReporte WHERE DATE_FORMAT(inicio, '%m-%Y') >= '" + fecha1 + "' AND DATE_FORMAT(inicio, '%m-%Y') <= '" + fecha2 + "' ORDER BY inicio;"
yo le paso como parametros 01-2011 (fecha1) y 02-2011(fecha2) y me dice que no hay registros por mostrar, cuando tengo registros para el mes de Enero. Pero si le paso unicamente para el mes de enero (01-2011 y 01-2011), me muestra correctamente los registros para ese mes...

Lo que he pensado es que si tengo solo registros para el mes de enero, el parametro que le pase para la segunda fecha no puede ser mayor a ese mes.. Y lo mismo me sucede cuando quiero que me muestre los registros por ej entre el 12-2010 y el 02-2011... Me dice que no hay registros por mostrar...

La he utilizado tambn con BETWEEN y pasa igual.... Por favor alguien que me de una sugerencia.. no se... Tal vez estoy manejando mal los campos datetime... o algo me falta...

Gracias a todos...
  #23 (permalink)  
Antiguo 28/04/2011, 16:06
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con BETWEEN !!!!

Vivi, este es un foro de SQL SERVER, nada que ver con MySQL
__________________
MCTS Isaias Islas
  #24 (permalink)  
Antiguo 05/08/2011, 10:46
Avatar de Hilary21  
Fecha de Ingreso: enero-2011
Mensajes: 1
Antigüedad: 13 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Problemas con BETWEEN !!!!

Gracias me Ayudo la condicion del BETWEEN modificada
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 16:59.