sql >> Database >  >> RDS >> Mysql

Een Case Statement gebruiken met IS NULL en IS NOT NULL

Je misbruikt de case uitdrukking. Er zijn twee vormen. Het gewenste formulier is:

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

Opmerking:er is geen userName na de CASE .

Dit controleert elke voorwaarde die bij de eerste stopt.

MySQL interpreteert booleans als een geldige waarde. Dus jouw versie is ofwel:

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

Dit retourneert NULL .

Of:

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

Vermoedelijk userName is een touwtje. Dit converteert userName naar een geheel getal op basis van voorloopcijfers. Als er geen voorloopcijfers zijn, krijgt u 0 , daarom is er een match.



  1. jBPM 6.5 + Tomcat 8 + Bitronix Transactie + Oracle 11G configuratie | Kan sessie java.lang.NullPointerException niet vastleggen

  2. Wat is PAGEIOLATCH_SH wachttype in SQL Server?

  3. Geavanceerde (?) EN / OF-query

  4. Stop Django met het vertalen van tijden naar UTC