Filtrage dynamique des données dans les clauses SQL WHERE
SQL ne prend pas directement en charge les instructions IF
dans les clauses WHERE
, mais vous pouvez réaliser un filtrage conditionnel à l'aide de méthodes alternatives. Cela permet une récupération de données flexible en fonction de conditions spécifiques.
L'approche de la déclaration CASE :
L'instruction CASE
fournit un moyen puissant de filtrer les données de manière conditionnelle. Il évalue une condition et renvoie une valeur basée sur le résultat. Dans une clause WHERE
, cela ressemble à :
<code class="language-sql">WHERE field LIKE CASE WHEN condition THEN result ELSE result END</code>
Par exemple, disons que vous souhaitez filtrer selon que @OrderNumber
est numérique. S'il s'agit d'un nombre numérique, utilisez une correspondance exacte ; sinon, utilisez une recherche générique :
<code class="language-sql">WHERE OrderNumber LIKE CASE WHEN IsNumeric(@OrderNumber) = 1 THEN @OrderNumber ELSE '%' + @OrderNumber + '%' END</code>
Affectation conditionnelle avec IF (approche procédurale) :
Une autre méthode consiste à utiliser une affectation conditionnelle en dehors de la clause WHERE
pour préparer la valeur de filtrage. Il s'agit d'une approche plus procédurale :
<code class="language-sql">IF condition SET field = value; ELSE SET field = value;</code>
Appliquer ceci à l'exemple @OrderNumber
:
<code class="language-sql">IF IsNumeric(@OrderNumber) = 1 SET @OrderNumber_Filtered = @OrderNumber; ELSE SET @OrderNumber_Filtered = '%' + @OrderNumber + '%';</code>
Ensuite, utilisez @OrderNumber_Filtered
dans votre clause WHERE
:
<code class="language-sql">WHERE OrderNumber LIKE @OrderNumber_Filtered;</code>
Les deux CASE
dans la clause WHERE
et l'affectation conditionnelle avant la clause WHERE
fournissent des moyens efficaces d'implémenter une logique conditionnelle pour le filtrage des données, améliorant ainsi la puissance et l'adaptabilité de vos requêtes SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!