between entre fechas

16/11/2004 - 15:05 por ZyXpHrEeZ | Informe spam
hola a todos, necesito un favor enorme, ojala me puedan colaborar, esque
tengo que hacer un between entre dos fechas pero los campos en la BD de las
fechas no estan unidos, me explico no estan por ej. 2004/11/16, sino que
tiene un campo que se llama AÑO, otro ke se llama MES, y otro que se llama
DIA. los campos estan asi porque estoy sacando unos reportes de un programa
que tiene la BD de esa forma por lo tanto no la puedo cambiar, entonces seria
muy facil decir where FECHACAMPO between fecha1 and fecha2, pero no se como
lo haria ya que el campo de fecha como les dije esta separado. me pueden
colaborar con esto??,
muchas gracias por su colaboracion.

Preguntas similare

Leer las respuestas

#1 Javier Loria
16/11/2004 - 15:19 | Informe spam
Hola:
Puedes hacer una serio de CAST's para darle el formato:
=SELECT CAST(CAST(Ano AS VARCHAR(4)) +
'/' +
CAST(Mes AS VARCHAR(2)) +
'/' +
CAST(Dia AS VARCHAR(2)) AS SMALLDATETIME)
= Claro que puedes usarlo en un BETWEEN pero olvidate de los indices, si
la tabla es grande es rendimiento no sera bueno.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"ZyXpHrEeZ" wrote in message
news:
hola a todos, necesito un favor enorme, ojala me puedan colaborar, esque
tengo que hacer un between entre dos fechas pero los campos en la BD de


las
fechas no estan unidos, me explico no estan por ej. 2004/11/16, sino que
tiene un campo que se llama AÑO, otro ke se llama MES, y otro que se llama
DIA. los campos estan asi porque estoy sacando unos reportes de un


programa
que tiene la BD de esa forma por lo tanto no la puedo cambiar, entonces


seria
muy facil decir where FECHACAMPO between fecha1 and fecha2, pero no se


como
lo haria ya que el campo de fecha como les dije esta separado. me pueden
colaborar con esto??,
muchas gracias por su colaboracion.
Respuesta Responder a este mensaje
#2 ulises
16/11/2004 - 15:28 | Informe spam
Si los campos son cadenas podrías formas la fecha con una
simple concatenacion : AÑO + MES + DIA, si son números
enteros podrías formarlos con AÑO * 10000 + MES * 100 +
DIA, en todo caso la consulta no será muy efectiva ya que
no podrá usar los índices si existieran ... si la tabla no
es muy extensa no habría mucho problema, si la fuese tal
vez te convendría crear una vista e indexarla por fecha, en
todo caso es cuestión de revisar los planes de ejecución.

Saludos,
Ulises

hola a todos, necesito un favor enorme, ojala me puedan


colaborar, esque
tengo que hacer un between entre dos fechas pero los


campos en la BD de las
fechas no estan unidos, me explico no estan por ej.


2004/11/16, sino que
tiene un campo que se llama Aà'O, otro ke se llama MES, y


otro que se llama
DIA. los campos estan asi porque estoy sacando unos


reportes de un programa
que tiene la BD de esa forma por lo tanto no la puedo


cambiar, entonces seria
muy facil decir where FECHACAMPO between fecha1 and


fecha2, pero no se como
lo haria ya que el campo de fecha como les dije esta


separado. me pueden
colaborar con esto??,
muchas gracias por su colaboracion.
.

Respuesta Responder a este mensaje
#3 ZyXpHrEeZ
16/11/2004 - 15:39 | Informe spam
javier primero que todo muchas gracias por responder. lo que te iba a
preguntar es si ese cast lo puedo utilizar en el where es decir
colocar.. where cast() between fecha 1 and fecha2?? y por el
rendimineto me imagino que si sera mas lento pero toca hacerlo asi porque esa
BD la utiliza otro programa entonces no se puede modificar. de nuevo
te doy las gracias hermano.

"Javier Loria" escribió:

Hola:
Puedes hacer una serio de CAST's para darle el formato:
=> SELECT CAST(CAST(Ano AS VARCHAR(4)) +
'/' +
CAST(Mes AS VARCHAR(2)) +
'/' +
CAST(Dia AS VARCHAR(2)) AS SMALLDATETIME)
=> Claro que puedes usarlo en un BETWEEN pero olvidate de los indices, si
la tabla es grande es rendimiento no sera bueno.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"ZyXpHrEeZ" wrote in message
news:
> hola a todos, necesito un favor enorme, ojala me puedan colaborar, esque
> tengo que hacer un between entre dos fechas pero los campos en la BD de
las
> fechas no estan unidos, me explico no estan por ej. 2004/11/16, sino que
> tiene un campo que se llama AÑO, otro ke se llama MES, y otro que se llama
> DIA. los campos estan asi porque estoy sacando unos reportes de un
programa
> que tiene la BD de esa forma por lo tanto no la puedo cambiar, entonces
seria
> muy facil decir where FECHACAMPO between fecha1 and fecha2, pero no se
como
> lo haria ya que el campo de fecha como les dije esta separado. me pueden
> colaborar con esto??,
> muchas gracias por su colaboracion.



Respuesta Responder a este mensaje
#4 Paulino Padial
16/11/2004 - 15:49 | Informe spam
Es muy buen idea lo de ulises, se podria probar a crear una vista por
ejemplo
select ( dia + mes + año ) as fecha from tabla
y crearle un indice clustered con ( fecha , claveprimaria )
y revisar los planes de ejecucion. podria valer, voy a probar con algun
ejemplo, y ahora os cuento los resultados.

__________________________________________
Paulino Padial López

Microsoft SQL-Server Administrator.
Microsoft Certified Solution Developer
Microsoft Certified Trainer
web: http://lucer.manicomio.net
__________________________________________

"ulises" escribió en el mensaje
news:118001c4cbe8$953c1350$
Si los campos son cadenas podrías formas la fecha con una
simple concatenacion : AÑO + MES + DIA, si son números
enteros podrías formarlos con AÑO * 10000 + MES * 100 +
DIA, en todo caso la consulta no será muy efectiva ya que
no podrá usar los índices si existieran ... si la tabla no
es muy extensa no habría mucho problema, si la fuese tal
vez te convendría crear una vista e indexarla por fecha, en
todo caso es cuestión de revisar los planes de ejecución.

Saludos,
Ulises

hola a todos, necesito un favor enorme, ojala me puedan


colaborar, esque
tengo que hacer un between entre dos fechas pero los


campos en la BD de las
fechas no estan unidos, me explico no estan por ej.


2004/11/16, sino que
tiene un campo que se llama Aà'O, otro ke se llama MES, y


otro que se llama
DIA. los campos estan asi porque estoy sacando unos


reportes de un programa
que tiene la BD de esa forma por lo tanto no la puedo


cambiar, entonces seria
muy facil decir where FECHACAMPO between fecha1 and


fecha2, pero no se como
lo haria ya que el campo de fecha como les dije esta


separado. me pueden
colaborar con esto??,
muchas gracias por su colaboracion.
.

Respuesta Responder a este mensaje
#5 Paulino Padial
16/11/2004 - 16:30 | Informe spam
No se puede crear la vista indexada, a no ser que tengas campos de acumule o
de resumen. Si vas a mostrar informacion de resumen, podrias usar una vista
indexada, si no , es mejor la opcion del Between con el Cast... olvidandote
de los indices.
__________________________________________
Paulino Padial López

Microsoft SQL-Server Administrator.
Microsoft Certified Solution Developer
Microsoft Certified Trainer
web: http://lucer.manicomio.net
__________________________________________
"Paulino Padial" escribió en el mensaje
news:O0YeDs%
Es muy buen idea lo de ulises, se podria probar a crear una vista por
ejemplo
select ( dia + mes + año ) as fecha from tabla
y crearle un indice clustered con ( fecha , claveprimaria )
y revisar los planes de ejecucion. podria valer, voy a probar con algun
ejemplo, y ahora os cuento los resultados.

__________________________________________
Paulino Padial López

Microsoft SQL-Server Administrator.
Microsoft Certified Solution Developer
Microsoft Certified Trainer
web: http://lucer.manicomio.net
__________________________________________

"ulises" escribió en el mensaje
news:118001c4cbe8$953c1350$
Si los campos son cadenas podrías formas la fecha con una
simple concatenacion : AÑO + MES + DIA, si son números
enteros podrías formarlos con AÑO * 10000 + MES * 100 +
DIA, en todo caso la consulta no será muy efectiva ya que
no podrá usar los índices si existieran ... si la tabla no
es muy extensa no habría mucho problema, si la fuese tal
vez te convendría crear una vista e indexarla por fecha, en
todo caso es cuestión de revisar los planes de ejecución.

Saludos,
Ulises

>hola a todos, necesito un favor enorme, ojala me puedan
colaborar, esque
>tengo que hacer un between entre dos fechas pero los
campos en la BD de las
>fechas no estan unidos, me explico no estan por ej.
2004/11/16, sino que
>tiene un campo que se llama Aà'O, otro ke se llama MES, y
otro que se llama
>DIA. los campos estan asi porque estoy sacando unos
reportes de un programa
>que tiene la BD de esa forma por lo tanto no la puedo
cambiar, entonces seria
>muy facil decir where FECHACAMPO between fecha1 and
fecha2, pero no se como
>lo haria ya que el campo de fecha como les dije esta
separado. me pueden
>colaborar con esto??,
>muchas gracias por su colaboracion.
>.
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida