¿Cómo omitir la cláusula WHERE sin usar If else en una consulta SQL de manera dinámica?
Estoy intentando escribir una consulta pero la cláusula WHERE
debe aplicarse de forma dinámica si existen datos de búsqueda, de lo contrario, omitir esa parte en una sola consulta.
Declare @search_text varchar(50)='', @start_date datetime, @end_date datetime;
If(@search_text = '')
begin
select * from Table1 where
CONVERT(VARCHAR(12), Mydate, 101) BETWEEN CONVERT(Date, @start_date) AND
CONVERT(Date,@end_date)
end
else
begin
select * from Table1 where column1 like '%'+@search_text+'%'
end
Estoy intentando esto pero no funciona:
select * from Table1 where ( Case when ISNULL(@search_text,'') = '' Then CONVERT(VARCHAR(12), MyDate, 101) END
BETWEEN CONVERT(Date, @start_date) AND CONVERT(Date,@end_date) )
davy.ai
El problema con tu consulta es que la instrucción
CASE
solo devuelve un valor, no afecta el flujo de ejecución de la consulta. Una forma de aplicar dinámicamente la cláusulaWHERE
sería utilizar instruccionesIF
, de esta manera:Esto verificará si la variable
@search_text
está vacía o no, y ejecutará la declaraciónSELECT
apropiada en base a eso.