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.