sql >> Databasteknik >  >> RDS >> Mysql

Att använda ett ärendeutlåtande med IS NULL och IS NOT NULL

Du missbrukar case uttryck. Det finns två former. Formen du vill ha är:

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

Obs! Det finns inget userName efter CASE .

Detta kontrollerar varje tillstånd och stannar vid det första.

MySQL tolkar booleaner som ett giltigt värde. Så din version är antingen:

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

Detta returnerar NULL .

Eller:

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

Förmodligen userName är ett snöre. Detta kommer att konvertera userName till ett heltal baserat på inledande siffror. Om det inte finns några inledande siffror får du 0 , vilket är anledningen till att det finns en matchning.



  1. MySQL - Dynamic Pivot Table Grouping Issue

  2. Använd DB_ID() för att returnera ID:t för en databas i SQL Server

  3. SQL Server AlwaysOn ( Tillgänglighetsgrupp ) Arkitektur och steg för steg installation -4 Lägg till och ta bort databas steg

  4. PHP-session är i konflikt med AJAX