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.

Preguntas similare

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.


Respuesta Responder a este mensaje
#2 Javier
27/08/2003 - 20:07 | Informe spam
Hola compañero,

creo entender que tienes este problema, si me confundo... te pido disculpas:

la manera mas sencilla es, en tu caso:


select * from reporte where fecha between '15/08/2003 00:00:00' and
'17/08/2003 23:59:59'


esa creo que es la solución.

Un cordial saludo,




Chente escribió:
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.


Respuesta Responder a este mensaje
#3 Chente
28/08/2003 - 16:10 | Informe spam
Gracias Liliana, con esto ya no hago la pregunta sobre el rendimiento de
estas, ya quedo aclarado, saludos.

Vicente López.


"Liliana Sorrentino" escribió en el mensaje
news:
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.
>
>


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