Peut-on utiliser une clause IF dans une clause WHERE en SQL ?

Pour inclure une clause de condition dans une clause WHERE, le mot-clé IF ne fonctionnera pas. Cela provoquera une erreur de syntaxe.

Le langage SQL autorise l'utilisation de clauses de condition dans les requêtes. Pour inclure une clause de condition dans une clause WHERE, le mot-clé IF ne fonctionnera pas. Cela provoquera une erreur de syntaxe.

A la place, on utilise la clause CASE qui permet de faire autant de conditions que l'on veut dans une clause WHERE. Pour chaque condition, on utilise les clauses WHEN ... THEN et la condition par défaut se déclare avec la clause ELSE.

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

Il existe également une deuxième solution qui n'utilise ni de clauses IF ni de clauses CASE. On se sert de la logique booléenne. Il s'agit d'utiliser les mots-clés OR, qui permettent de valider l'une ou l'autre des deux conditions, et le mot clé AND qui permet de valider les deux conditions.

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