es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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) )
Tags:  , , ,

Answer

  1. Avatar for 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áusula WHERE sería utilizar instrucciones IF, de esta manera:

    IF(ISNULL(@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
    

    Esto verificará si la variable @search_text está vacía o no, y ejecutará la declaración SELECT apropiada en base a eso.

Comments are closed.