Syntaxe d’expression de cas SQL?

Quelle est la syntaxe complète et correcte de l’expression SQL Case?

La syntaxe complète dépend du moteur de firebase database avec lequel vous travaillez:

Pour SQL Server:

 CASE case-expression WHEN when-expression-1 THEN value-1 [ WHEN when-expression-n THEN value-n ... ] [ ELSE else-value ] END 

ou:

 CASE WHEN boolean-when-expression-1 THEN value-1 [ WHEN boolean-when-expression-n THEN value-n ... ] [ ELSE else-value ] END 

expressions, etc:

 case-expression - something that produces a value when-expression-x - something that is compared against the case-expression value-1 - the result of the CASE statement if: the when-expression == case-expression OR the boolean-when-expression == TRUE boolean-when-exp.. - something that produces a TRUE/FALSE answer 

Lien: CASE (Transact-SQL)

Notez également que la commande des instructions WHEN est importante. Vous pouvez facilement écrire plusieurs clauses WHEN qui se chevauchent et la première qui correspond est utilisée .

Remarque : Si aucune clause ELSE n’est spécifiée et qu’aucune condition WHEN correspondante n’est trouvée, la valeur de l’expression CASE sera NULL .

Considérant que vous avez balisé plusieurs produits, je dirais que la syntaxe correcte serait celle de la norme ISO / ANSI SQL-92:

  ::=  |   ::= NULLIF      | COALESCE   {   }...   ::=  |   ::= CASE  ... [  ] END  ::= CASE ... [  ] END  ::= WHEN  THEN   ::= WHEN  THEN   ::= ELSE   ::=   ::=   ::=  | NULL  ::=  

Règles de syntaxe

 1) NULLIF (V1, V2) is equivalent to the following : CASE WHEN V1=V2 THEN NULL ELSE V1 END 2) COALESCE (V1, V2) is equivalent to the following : CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END 3) COALESCE (V1, V2, . . . ,n ), for n >= 3, is equivalent to the following : CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, . . . ,n ) END 4) If a  specifies a , then let CO be the : a) The data type of each  WO shall be comparable with the data type of the . b) The  is equivalent to a  in which each  specifies a  of the form "CO=WO". 5) At least one  in a  shall specify a . 6) If an  is not specified, then ELSE NULL is im- plicit. 7) The data type of a  is determined by ap- plying Subclause 9.3, "Set operation result data types", to the data types of all s in the . Access Rules None. General Rules 1) Case: a) If a  specifies NULL, then its value is the null value. b) If a  specifies a , then its value is the value of that . 2) Case: a) If the  of some  in a  is true, then the value of the  is the value of the  of the first (leftmost)  whose  is true, cast as the data type of the . b) If no  in a  is true, then the value of the  is the value of the  of the explicit or implicit , cast as the data type of the . 

Voici les exemples d’instruction CASE des documents PostgreSQL (Postgres suit le standard SQL ici):

 SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; 

ou

 SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test; 

De toute évidence, la deuxième forme est plus propre lorsque vous ne faites que vérifier un champ par rapport à une liste de valeurs possibles. La première forme permet des expressions plus compliquées.

Sybase a la même syntaxe de casse que SQL Server:

La description

Prend en charge les expressions SQL conditionnelles; peut être utilisé partout où une expression de valeur peut être utilisée.

Syntaxe

 case when search_condition then expression [when search_condition then expression]... [else expression] end 

Syntaxe de cas et de valeurs

 case expression when expression then expression [when expression then expression]... [else expression] end 

Paramètres

Cas

commence l’expression de cas.

quand

précède la condition de recherche ou l’expression à comparer.

condition_recherche

est utilisé pour définir des conditions pour les résultats sélectionnés. Les conditions de recherche pour les expressions de cas sont similaires aux conditions de recherche dans une clause where. Les conditions de recherche sont détaillées dans le Guide de l’utilisateur Transact-SQL.

puis

précède l’expression qui spécifie une valeur de résultat de case.

expression

est un nom de colonne, une constante, une fonction, une sous-requête ou toute combinaison de noms de colonnes, de constantes et de fonctions reliés par des opérateurs arithmétiques ou binarys. Pour plus d’informations sur les expressions, voir «Expressions» dans.

Exemple

 select disaster, case when disaster = "earthquake" then "stand in doorway" when disaster = "nuclear apocalypse" then "hide in basement" when monster = "zombie apocalypse" then "hide with Chuck Norris" else then "ask mom" end from endoftheworld 

J’ai déterré la page Oracle pour le même et il semble que ce soit la même syntaxe, juste décrite légèrement différente.

Lien: Oracle / PLSQL: déclaration de cas

La syntaxe Oracle de la documentation 11g :

 CASE { simple_case_expression | searched_case_expression } [ else_clause ] END 

simple_case_expression

 expr { WHEN comparison_expr THEN return_expr }... 

expression_case_fichier

 { WHEN condition THEN return_expr }... 

else_clause

 ELSE else_expr 

Un point à noter dans le cas d’Oracle, si non, lorsqu’il ya correspondance et qu’il n’ya pas d’autre partie, une exception est déclenchée.

Syntaxe de l’instruction de cas dans SQL SERVER:

 CASE column WHEN value1 THEN 1 WHEN value3 THEN 2 WHEN value3 THEN 3 WHEN value1 THEN 4 ELSE '' END 

Et nous pouvons utiliser comme ci-dessous aussi:

 CASE WHEN column=value1 THEN 1 WHEN column=value3 THEN 2 WHEN column=value3 THEN 3 WHEN column=value1 THEN 4 ELSE '' END