Filtrar por fecha, con o sin parametros?

15/11/2006 - 21:45 por Daniel G. Samborski | Informe spam
Hola, no sabia como titular esta consulta...
Espero que me puedan ayudar, paso a describir lo que necesito realizar.

Un select que dependiendo, si le paso o no un parametro realice un filtro
exacto en una fecha o entre dos fechas.

Es como si hubiera un if dentro de un select, si paso una fecha, filtar por
esa fecha, de lo contrario utilizar un between
Habia pensado en algo como esto, pero me muestra siempre el between, le pase
o no una fecha.

select distinct(fecsol) from creditos where
(
(fecsol= @Fecha)
or
(fecsol between (select min(fecsol) from creditos) and (select max(fecsol)
from creditos))
)

¿Alguna sugerencia?

Debo aclarar que no puedo utilizar algo como esto.

if @Fecha <> ''
select * from creditos where fecsol = @Fecha
else
select * from creditos where fecsol between (select min(fecsol) from
creditos) and (select max(fecsol) from creditos)

El motivo es que el select original puede o no recibir varios parametros y
si debo realizar un if por cada fecha seria muy largo y repetiria mucho
codigo.


Daniel.
 

Leer las respuestas

#1 Alejandro Mesa
15/11/2006 - 22:20 | Informe spam
Trata:

select distinct fecsol
from dbo.creditos
where fecsol between coalesce(@d, 0) and coalesce(@d, '99991231')
go


AMB


"Daniel G. Samborski" wrote:

Hola, no sabia como titular esta consulta...
Espero que me puedan ayudar, paso a describir lo que necesito realizar.

Un select que dependiendo, si le paso o no un parametro realice un filtro
exacto en una fecha o entre dos fechas.

Es como si hubiera un if dentro de un select, si paso una fecha, filtar por
esa fecha, de lo contrario utilizar un between
Habia pensado en algo como esto, pero me muestra siempre el between, le pase
o no una fecha.

select distinct(fecsol) from creditos where
(
(fecsol= @Fecha)
or
(fecsol between (select min(fecsol) from creditos) and (select max(fecsol)
from creditos))
)

¿Alguna sugerencia?

Debo aclarar que no puedo utilizar algo como esto.

if @Fecha <> ''
select * from creditos where fecsol = @Fecha
else
select * from creditos where fecsol between (select min(fecsol) from
creditos) and (select max(fecsol) from creditos)

El motivo es que el select original puede o no recibir varios parametros y
si debo realizar un if por cada fecha seria muy largo y repetiria mucho
codigo.


Daniel.



Preguntas similares