Est-il possible d'utiliser une clause IF dans une clause WHERE dans MS SQL?
Exemple:
WHERE
IF IsNumeric(@OrderNumber) = 1
OrderNumber = @OrderNumber
ELSE
OrderNumber LIKE '%' + @OrderNumber + '%'
sql
sql-server
tsql
Bryan Roth
la source
la source
CASE
est la solution appropriée dans la plupart des cas. Dans mon cas, je voulais changer d'opérateur de comparaison et j'ai donc utilisé l'approche suivante.Vous devriez pouvoir le faire sans IF ni CAS
Selon la version de SQL, vous devrez peut-être modifier les transtypages du numéro de commande en INT ou VARCHAR, selon que les transtypages implicites sont pris en charge.
Il s'agit d'une technique très courante dans une clause WHERE. Si vous souhaitez appliquer une logique "IF" dans la clause WHERE, tout ce que vous devez faire est d'ajouter la condition supplémentaire avec un booléen AND à la section où elle doit être appliquée.
la source
Vous n'avez pas du tout besoin d'une instruction IF.
la source
where (@AdmUserId is null or CurrentOrder.CustomerAdmUserId = @AdmUserId)
Ou filtre uniquement si IncludeDeleted = 0:where (@IncludeDeleted = 1 or ItemObject.DeletedFlag = 0)
Il n'y a pas de bon moyen de le faire en SQL. Quelques approches que j'ai vues:
1) Utilisez CASE combiné avec des opérateurs booléens:
2) Utilisez des IF en dehors de SELECT
3) À l'aide d'une longue chaîne, composez votre instruction SQL de manière conditionnelle, puis utilisez EXEC
La 3ème approche est hideuse, mais c'est presque la seule pensée qui fonctionne si vous avez un certain nombre de conditions variables comme ça.
la source
IF...ELSE...
conditionnels en booléensAND
etOR
comme dans la réponse @ njr101 ci-dessus. L'inconvénient de ^ cette approche est qu'il peut être extrêmement difficile si vous en avez plusieursIF
ou si vous en avez plusieurs qui sont imbriquésUtilisez une instruction CASE au lieu de IF.
la source
Vous voulez l'instruction CASE
la source
Je pense que là où ... comme / = ... cas ... alors ... peut fonctionner avec des booléens. J'utilise T-SQL.
Scénario: Supposons que vous souhaitiez obtenir les passe-temps de la personne 30 si le booléen est faux, et les passe-temps de la personne 42 si le booléen est vrai. (Selon certains, les recherches de passe-temps représentent plus de 90% des cycles de calcul de l'entreprise, alors payez une attention particulière.).
la source
la source
IF P THEN Q ELSE R
<=>
( ( NOT P ) OR Q ) AND ( P OR R )
la source
En ligne, la condition fonctionnera correctement.
la source
L'exemple suivant exécute une requête dans le cadre de l'expression booléenne, puis exécute des blocs d'instructions légèrement différents en fonction du résultat de l'expression booléenne. Chaque bloc d'instructions commence par BEGIN et se termine par END.
Utilisation d'instructions IF ... ELSE imbriquées L'exemple suivant montre comment une instruction IF… ELSE peut être imbriquée dans une autre. Définissez la variable @Number sur 5, 50 et 500 pour tester chaque instruction.
la source
Dans le serveur SQL, j'ai eu le même problème, je voulais utiliser une instruction and uniquement si le paramètre est faux et sur true, je devais afficher les valeurs true et false, donc je l'ai utilisé de cette façon
la source
Voyez si cela aide.
la source
la source