Maison > base de données > tutoriel mysql > Comment utiliser correctement les instructions CASE dans les clauses WHERE de SQL Server 2008 ?

Comment utiliser correctement les instructions CASE dans les clauses WHERE de SQL Server 2008 ?

Linda Hamilton
Libérer: 2025-01-11 10:24:41
original
786 Les gens l'ont consulté

How to Correctly Use CASE Statements in SQL Server 2008 WHERE Clauses?

Clause WHERE de SQL Server 2008 : utilisation appropriée de l'instruction CASE

L'utilisation d'instructions CASE dans les clauses WHERE de SQL Server 2008 exige une syntaxe précise pour une exécution correcte. Ce qui suit illustre les erreurs courantes et leurs solutions.

Un exemple de placement incorrect d'une instruction CASE dans une clause WHERE :

<code class="language-sql">WHERE 
    CASE LEN('TestPerson')
        WHEN 0 THEN co.personentered  = co.personentered
        ELSE co.personentered LIKE '%TestPerson'
    END 
    AND cc.ccnum = CASE LEN('TestFFNum')
        WHEN 0 THEN cc.ccnum 
        ELSE 'TestFFNum' 
    END </code>
Copier après la connexion

Le problème est la tentative d'attribuer des valeurs dans l'instruction CASE en utilisant = ou LIKE. L'instruction CASE doit être utilisée pour la génération de valeur conditionnelle, et non pour l'affectation. L'approche corrigée utilise la logique booléenne :

<code class="language-sql">WHERE (LEN('TestPerson') = 0 AND co.personentered = co.personentered)
   OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson')</code>
Copier après la connexion

Cette requête révisée évalue correctement les conditions en fonction de la longueur de « TestPerson ».

Les comparaisons de dates nécessitent également un examen attentif. Au lieu de plusieurs instructions CASE imbriquées, l'utilisation de conditions OR distinctes est souvent plus claire et plus efficace :

<code class="language-sql">WHERE (LEN('2011-01-09 11:56:29.327') = 0 AND co.DTEntered = co.DTEntered)
   OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') = 0 AND co.DTEntered >= '2011-01-09 11:56:29.327')
   OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') > 0 AND co.DTEntered BETWEEN '2011-01-09 11:56:29.327' AND '2012-01-09 11:56:29.327')</code>
Copier après la connexion

En employant ces syntaxes corrigées, vos requêtes SQL Server 2008 incorporant des instructions CASE dans les clauses WHERE s'exécuteront comme prévu.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal