Saltar al contenido

SQL: cláusula IF dentro de la cláusula WHERE

Después de mucho luchar ya dimos con la contestación de este atascamiento que algunos los lectores de este espacio han presentado. Si quieres compartir alguna información puedes aportar tu conocimiento.

Solución:

Usar una declaración CASE
ACTUALIZAR: La sintaxis anterior (como lo señalaron algunas personas) no funciona. Puede usar CASE de la siguiente manera:

WHERE OrderNumber LIKE
  CASE WHEN IsNumeric(@OrderNumber) = 1 THEN 
    @OrderNumber 
  ELSE
    '%' + @OrderNumber
  END

O puede usar una declaración IF como señala @NJ Reed.

Debería poder hacer esto sin ningún IF o CASE

 WHERE 
   (IsNumeric(@OrderNumber) AND
      (CAST OrderNumber AS VARCHAR) = (CAST @OrderNumber AS VARCHAR)
 OR
   (NOT IsNumeric(@OrderNumber) AND
       OrderNumber LIKE ('%' + @OrderNumber))

Según el tipo de SQL, es posible que deba modificar las conversiones en el número de pedido a INT o VARCHAR, según si se admiten las conversiones implícitas.

Esta es una técnica muy común en una cláusula WHERE. Si desea aplicar algo de lógica “IF” en la cláusula WHERE, todo lo que necesita hacer es agregar la condición adicional con un AND booleano a la sección donde debe aplicarse.

No necesita una declaración IF en absoluto.

WHERE
    (IsNumeric(@OrderNumber) = 1 AND OrderNumber = @OrderNumber)
OR (IsNumeric(@OrderNumber) = 0 AND OrderNumber LIKE '%' + @OrderNumber + '%')

Sección de Reseñas y Valoraciones

Si te ha sido de utilidad este post, sería de mucha ayuda si lo compartieras con otros desarrolladores de esta forma nos ayudas a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *