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

Rango de fechas en SQL Server 2000

Estas en el tema de Rango de fechas en SQL Server 2000 en el foro de Bases de Datos General en Foros del Web. Tengo este ejemplo SELECT MIN (V.NumVta) As Desde, MAX (V.NumVta) As Hasta FROM TblVta V WHERE FecVta BETWEEN '01/04/2005' AND '18/04/2005') AND CveEntCli = 1 ...
  #1 (permalink)  
Antiguo 19/04/2005, 12:37
 
Fecha de Ingreso: abril-2005
Mensajes: 19
Antigüedad: 19 años
Puntos: 0
Rango de fechas en SQL Server 2000

Tengo este ejemplo




SELECT MIN(V.NumVta) As Desde, MAX(V.NumVta) As Hasta
FROM TblVta V
WHERE FecVta BETWEEN '01/04/2005' AND '18/04/2005')
AND CveEntCli = 1 AND CveEntSuc = 2 AND StVta = 0


El problema es que si tengo Ventas hechas el día 18/04/2005 y pongo la siguiente consulta:

SELECT MIN(V.NumVta) As Desde, MAX(V.NumVta) As Hasta
FROM TblVta V
WHERE FecVta BETWEEN '18/04/2005' AND '18/04/2005')
AND CveEntCli = 1 AND CveEntSuc = 2 AND StVta = 0


La consulta me devuelve nullos


Hay alguna manera de corregir esto

Gracias de antemano
  #2 (permalink)  
Antiguo 19/04/2005, 13:18
Avatar de pablinweb  
Fecha de Ingreso: julio-2003
Mensajes: 283
Antigüedad: 20 años, 9 meses
Puntos: 0
el problema es que estas anulando la consulta, es lo mismo que pedir que la fecha sea menor a hoy y mayor a mañana, haz mejor dos consultas una con el min y otra con el max.

SELECT MIN(V.NumVta) As Desde
FROM TblVta V
WHERE FecVta BETWEEN '01/04/2005' AND '18/04/2005')
AND CveEntCli = 1 AND CveEntSuc = 2 AND StVta = 0

SELECT MAX(V.NumVta) As Hasta
FROM TblVta V
WHERE FecVta BETWEEN '01/04/2005' AND '18/04/2005')
AND CveEntCli = 1 AND CveEntSuc = 2 AND StVta = 0
  #3 (permalink)  
Antiguo 19/04/2005, 13:43
 
Fecha de Ingreso: abril-2005
Mensajes: 19
Antigüedad: 19 años
Puntos: 0
Ok. probaré

Gracias
  #4 (permalink)  
Antiguo 20/04/2005, 10:15
 
Fecha de Ingreso: abril-2005
Mensajes: 19
Antigüedad: 19 años
Puntos: 0
Pues funciona, pero no como esperaba...

A ver si puedo explicarme

Tengo un punto de venta, los tickets que se generan son incrementables.
Lo que quiero hacer es; obtener el ticket inicial de este dia (20/04/2005) y el tcket final de este mismo dia, o lo que es lo mismo; quiero saber el rango de tickets de un rango de fechas, en este caso es un solo día


La clausula Between funciona bien pero por lo que he probado funciona sola para rangos mas abiertos, es decir, si quiero obtener los tickets generados del 01/04/2005 al 30/04/2005, la consulta me devuelve los tickets que estan dentro del rango (02/04/2005 - 29/04/205), ¿Donde quedaron los del dia 01 y los de dia 30?

Aqui pongo nuevamente la consulta que habia probado:

SELECT MIN(V.NumVta) As Desde, MAX(V.NumVta) As Hasta
FROM TblVta V
WHERE FecVta BETWEEN '01/04/2005' AND '18/04/2005')
AND CveEntCli = 1 AND CveEntSuc = 2 AND StVta = 0

Gracias nuevamente
  #5 (permalink)  
Antiguo 20/04/2005, 12:37
Avatar de pablinweb  
Fecha de Ingreso: julio-2003
Mensajes: 283
Antigüedad: 20 años, 9 meses
Puntos: 0
y así:

SELECT MIN(V.NumVta) As Desde, MAX(V.NumVta) As Hasta
FROM TblVta V
WHERE FecVta > '01/04/2005' AND FecVta < '3/04/2005'
AND CveEntCli = 1 AND CveEntSuc = 2 AND StVta = 0

te daría todas las del día 2
el BETWEEN debería de andarte bien porque toma tambien el = pero en los casos que lo utilizas con fechas muchas veces dá errores con la parte de la hora porque quieras o no el campo siempre es fecha hora
  #6 (permalink)  
Antiguo 20/04/2005, 17:38
 
Fecha de Ingreso: abril-2005
Mensajes: 19
Antigüedad: 19 años
Puntos: 0
Cita:
Iniciado por pablinweb
y así:

SELECT MIN(V.NumVta) As Desde, MAX(V.NumVta) As Hasta
FROM TblVta V
WHERE FecVta > '01/04/2005' AND FecVta < '3/04/2005'
AND CveEntCli = 1 AND CveEntSuc = 2 AND StVta = 0

te daría todas las del día 2
el BETWEEN debería de andarte bien porque toma tambien el = pero en los casos que lo utilizas con fechas muchas veces dá errores con la parte de la hora porque quieras o no el campo siempre es fecha hora

Ok. Es correcto ya detecte mi error (la solución que pongo tambien vale), el problema era el tipo de datos ques estaba manejando en la fecha de la venta (small date time, y bueno, la forma de guardar la fecha) resulta que al guardar con este formato almacenaba algo asi "2005-04-18 13:25:40" aqui el between se hace bolas por la hora, la solución es guardar solo "2005-04-18 00:00:00" y listo, el between funciona muy bien

Salu2 y gracias
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:46.