Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando uma instrução Case com IS NULL e IS NOT NULL


Você está usando incorretamente o case expressão. Existem duas formas. O formulário que você deseja é:
(CASE WHEN userName IS NULL THEN 'was null'
      WHEN userName IS NOT NULL THEN 'was not null'
 END) AS caseExpressionTest

Nota:Não há userName após o CASE .

Isso verifica cada condição parando na primeira.

MySQL interpreta booleanos como um valor válido. Então sua versão é:
-- when userName is NULL
(CASE userName
    WHEN 0 THEN 'was null'
    WHEN 1 THEN 'was not null'
END AS caseExpressionTest

Isso retornará NULL .

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

Presumivelmente, userName é uma corda. Isso converterá userName para um número inteiro com base nos dígitos iniciais. Se não houver dígitos iniciais, você obterá 0 , e é por isso que há uma correspondência.