Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation d'une instruction case avec IS NULL et IS NOT NULL

Vous abusez de la case expression. Il existe deux formes. Le formulaire que vous voulez est :

(CASE WHEN userName IS NULL THEN 'was null'
      WHEN userName IS NOT NULL THEN 'was not null'
 END) AS caseExpressionTest

Remarque :Il n'y a pas de userName après le CASE .

Ceci vérifie chaque condition en s'arrêtant à la première.

MySQL interprète les booléens comme une valeur valide. Votre version est donc :

-- when userName is NULL
(CASE userName
    WHEN 0 THEN 'was null'
    WHEN 1 THEN 'was not null'
END AS caseExpressionTest

Cela renverra NULL .

Ou :

-- when userName is not NULL
(CASE userName
    WHEN 1 THEN 'was null'
    WHEN 0 THEN 'was not null'
END AS caseExpressionTest

Vraisemblablement, userName est une chaîne. Cela convertira userName en un entier basé sur les premiers chiffres. S'il n'y a pas de chiffres de tête, vous obtenez 0 , c'est pourquoi il y a une correspondance.