Solo para confirmar...

27/08/2003 - 17:14 por Chente | Informe spam
Que tal compañeros, solo para confirmar esto que estoy haciendo este bien, o
si hay alguna otra forma mas sencilla, puesadelante, gracias.


Tengo una tabla llamada Reporte, la cual contiene dos campos
reporte int
fecha DateTime

contiene datos como estos:
Reporte Fecha
154379 2003-08-28 01:01:01.000
154378 2003-08-26 23:46:05.000
154377 2003-08-26 23:33:17.000
154376 2003-08-25 23:24:08.000
154375 2003-08-23 22:59:56.000
154374 2003-08-22 22:54:20.000
154373 2003-08-22 22:50:21.000
154372 2003-08-19 22:32:19.000
154371 2003-08-18 21:52:22.000
154370 2003-08-17 21:46:43.000
154369 2003-08-16 21:39:44.000
154368 2003-08-15 21:38:00.000
154367 2003-08-15 21:19:21.000
154366 2003-08-14 21:02:00.000
154365 2003-08-13 20:56:59.000
154364 2003-08-12 19:54:55.000
154363 2003-08-12 19:51:54.000
154362 2003-08-12 19:43:40.000
154361 2003-08-11 19:39:32.000
154360 2003-08-11 19:34:23.000
154361 2003-07-16 19:39:32.000
154360 2003-07-16 19:34:23.000

si ejecuto esta sentencia:
select * from reporte
where fecha between '15/08/2003' and '17/08/2003'

me devuelve solo el registro 154369 2003-08-16 21:39:44.000 , yo
entiendo que es por la horas que tienen las fechas, por lo cual convierto a
la fecha un varchar e intento de nuevo...
select * from reporte
where convert(varchar(10), fecha, 103) between '15/08/2003' and
'17/08/2003'

y me devuelve reportes con fechas que no tienen nada que ver, esto a lo
mejor tambien lo entiend, ya que lo esta analizando como un varchar(10), por
lo cual lo moldeo a DateTime de nuevo y funciona muy bien, claro esta porque
ya no tiene las hora y asi, si funciona el between con las fechas, esta es
la sentencia.
select * from reporte
where cast(convert(varchar(10), fecha, 103) as DateTime) between
'15/08/2003' and '17/08/2003'

y ahora si obtengo los resultados deseados.

154370 2003-08-17 21:46:43.000
154369 2003-08-16 21:39:44.000
154368 2003-08-15 21:38:00.000
154367 2003-08-15 21:19:21.000

Ahora bien, la pregunta es la siguiente, ¿hay forma de evitar esto?, evitar
convertir a varchar para después moldear a DateTime.


Espero comentarios, gracias de nuevo por leerlo el mensaje y saludos.


Vicente López.
 

Leer las respuestas

#1 Liliana Sorrentino
27/08/2003 - 19:11 | Informe spam
Hola,
Es cierto que el problema está generado por la hora, entonces podrías evitar
las conversiones tomando un día más de tu límite máximo:

select * from Reporte
where fecha between '20030815' and '20030818'

Hay un artículo interesante en PortalSQL (de nada Miguel y Emilio) publicado
por Eladio Rincón que puede dar luz sobre el tema:
http://www.configuracionesintegrale...re.asp?art
iculo1
Saludos... Liliana.

"Chente" escribió en el mensaje
news:
Que tal compañeros, solo para confirmar esto que estoy haciendo este bien,


o
si hay alguna otra forma mas sencilla, puesadelante, gracias.


Tengo una tabla llamada Reporte, la cual contiene dos campos
reporte int
fecha DateTime

contiene datos como estos:
Reporte Fecha
154379 2003-08-28 01:01:01.000
154378 2003-08-26 23:46:05.000
154377 2003-08-26 23:33:17.000
154376 2003-08-25 23:24:08.000
154375 2003-08-23 22:59:56.000
154374 2003-08-22 22:54:20.000
154373 2003-08-22 22:50:21.000
154372 2003-08-19 22:32:19.000
154371 2003-08-18 21:52:22.000
154370 2003-08-17 21:46:43.000
154369 2003-08-16 21:39:44.000
154368 2003-08-15 21:38:00.000
154367 2003-08-15 21:19:21.000
154366 2003-08-14 21:02:00.000
154365 2003-08-13 20:56:59.000
154364 2003-08-12 19:54:55.000
154363 2003-08-12 19:51:54.000
154362 2003-08-12 19:43:40.000
154361 2003-08-11 19:39:32.000
154360 2003-08-11 19:34:23.000
154361 2003-07-16 19:39:32.000
154360 2003-07-16 19:34:23.000

si ejecuto esta sentencia:
select * from reporte
where fecha between '15/08/2003' and '17/08/2003'

me devuelve solo el registro 154369 2003-08-16 21:39:44.000 , yo
entiendo que es por la horas que tienen las fechas, por lo cual convierto


a
la fecha un varchar e intento de nuevo...
select * from reporte
where convert(varchar(10), fecha, 103) between '15/08/2003' and
'17/08/2003'

y me devuelve reportes con fechas que no tienen nada que ver, esto a lo
mejor tambien lo entiend, ya que lo esta analizando como un varchar(10),


por
lo cual lo moldeo a DateTime de nuevo y funciona muy bien, claro esta


porque
ya no tiene las hora y asi, si funciona el between con las fechas, esta es
la sentencia.
select * from reporte
where cast(convert(varchar(10), fecha, 103) as DateTime) between
'15/08/2003' and '17/08/2003'

y ahora si obtengo los resultados deseados.

154370 2003-08-17 21:46:43.000
154369 2003-08-16 21:39:44.000
154368 2003-08-15 21:38:00.000
154367 2003-08-15 21:19:21.000

Ahora bien, la pregunta es la siguiente, ¿hay forma de evitar esto?,


evitar
convertir a varchar para después moldear a DateTime.


Espero comentarios, gracias de nuevo por leerlo el mensaje y saludos.


Vicente López.


Preguntas similares