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.