Comando sql: algo curioso o estoy mal en algo

21/08/2007 - 17:27 por Luis Mata | Informe spam
print dateadd(dd,-3,getdate())
DECLARE @fecha datetime
SET @fecha = dateadd(dd,-3,getdate())
select * from sitabcct
where dtregdoc between @fecha and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado

60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

select * from sitabcct
where dtregdoc between '2007-08-18' and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado:
60047052 2007-08-18 00:00:00.000 490.20
60014618 2007-08-18 00:00:00.000 295.72
60014619 2007-08-18 00:00:00.000 151.73
60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

se dan cuenta o estoy viendo mal, la variable de la primera sentencia toma
la fecha 18-08-2007 pero en la consulta coge desde el 20-08-2007.
en cambio en el segundo lo pongo defrente la fecha 18-08-2007 en el between
y ahi si me coge desde el 18-08-2007.

que pasa estoy cansado, algo hize mal haber.

Preguntas similare

Leer las respuestas

#1 Isaias
21/08/2007 - 17:40 | Informe spam
No utilices BETWEEN, es mejor:

WHERE fecha >= @fecha AND fecha <= @fecha
Saludos
IIslas


"Luis Mata" wrote:



print dateadd(dd,-3,getdate())
DECLARE @fecha datetime
SET @fecha = dateadd(dd,-3,getdate())
select * from sitabcct
where dtregdoc between @fecha and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado

60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

select * from sitabcct
where dtregdoc between '2007-08-18' and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado:
60047052 2007-08-18 00:00:00.000 490.20
60014618 2007-08-18 00:00:00.000 295.72
60014619 2007-08-18 00:00:00.000 151.73
60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

se dan cuenta o estoy viendo mal, la variable de la primera sentencia toma
la fecha 18-08-2007 pero en la consulta coge desde el 20-08-2007.
en cambio en el segundo lo pongo defrente la fecha 18-08-2007 en el between
y ahi si me coge desde el 18-08-2007.

que pasa estoy cansado, algo hize mal haber.






Respuesta Responder a este mensaje
#2 Carlos Sacristan
21/08/2007 - 17:42 | Informe spam
Está devolviendo lo que le pides. Ten en cuenta que @fecha está
incluyendo también la hora, es decir, que le estás pidiendo los datos que se
encuentran desde el día 18 de agosto a las 10:18, cuando en realidad todos
comienzan a las 00:00.

Vamos, que le hagas un convert también a @fecha para que tome sólo el
día y nos dices

"Luis Mata" escribió en el mensaje
news:


print dateadd(dd,-3,getdate())
DECLARE @fecha datetime
SET @fecha = dateadd(dd,-3,getdate())
select * from sitabcct
where dtregdoc between @fecha and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado

60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

select * from sitabcct
where dtregdoc between '2007-08-18' and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado:
60047052 2007-08-18 00:00:00.000 490.20
60014618 2007-08-18 00:00:00.000 295.72
60014619 2007-08-18 00:00:00.000 151.73
60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

se dan cuenta o estoy viendo mal, la variable de la primera sentencia toma
la fecha 18-08-2007 pero en la consulta coge desde el 20-08-2007.
en cambio en el segundo lo pongo defrente la fecha 18-08-2007 en el
between y ahi si me coge desde el 18-08-2007.

que pasa estoy cansado, algo hize mal haber.





Respuesta Responder a este mensaje
#3 Salvador Ramos
21/08/2007 - 17:46 | Informe spam
Hola Luís,

La diferencia es que cuando restas 3 días a getdate() tiene en cuenta la
hora que te devuelve getdate, mientras que cuando pasas tu la fecha no la
tiene en cuenta ya que no se la estás pasando, puedes comprobarlo si
incluyes
print @fecha
antes del primer select

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm


"Luis Mata" escribió en el mensaje
news:


print dateadd(dd,-3,getdate())
DECLARE @fecha datetime
SET @fecha = dateadd(dd,-3,getdate())
select * from sitabcct
where dtregdoc between @fecha and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado

60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

select * from sitabcct
where dtregdoc between '2007-08-18' and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado:
60047052 2007-08-18 00:00:00.000 490.20
60014618 2007-08-18 00:00:00.000 295.72
60014619 2007-08-18 00:00:00.000 151.73
60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

se dan cuenta o estoy viendo mal, la variable de la primera sentencia toma
la fecha 18-08-2007 pero en la consulta coge desde el 20-08-2007.
en cambio en el segundo lo pongo defrente la fecha 18-08-2007 en el
between y ahi si me coge desde el 18-08-2007.

que pasa estoy cansado, algo hize mal haber.





Respuesta Responder a este mensaje
#4 Luis Mata
21/08/2007 - 17:50 | Informe spam
tienen razon muchachos que cantinflada
Gracias

"Luis Mata" escribió en el mensaje de
noticias news:


print dateadd(dd,-3,getdate())
DECLARE @fecha datetime
SET @fecha = dateadd(dd,-3,getdate())
select * from sitabcct
where dtregdoc between @fecha and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado

60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

select * from sitabcct
where dtregdoc between '2007-08-18' and convert(char(10),GETDATE(),112)
order by dtregdoc

resultado:
60047052 2007-08-18 00:00:00.000 490.20
60014618 2007-08-18 00:00:00.000 295.72
60014619 2007-08-18 00:00:00.000 151.73
60014625 2007-08-20 00:00:00.000 242.58
60014626 2007-08-20 00:00:00.000 1890.49
60014627 2007-08-20 00:00:00.000 19276.93
60014643 2007-08-21 00:00:00.000 160.38
60014644 2007-08-21 00:00:00.000 9762.65
60014645 2007-08-21 00:00:00.000 7618.01

se dan cuenta o estoy viendo mal, la variable de la primera sentencia toma
la fecha 18-08-2007 pero en la consulta coge desde el 20-08-2007.
en cambio en el segundo lo pongo defrente la fecha 18-08-2007 en el
between y ahi si me coge desde el 18-08-2007.

que pasa estoy cansado, algo hize mal haber.






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida