sql >> Base de Datos >  >> RDS >> Mysql

Uso de una declaración de caso con IS NULL y IS NOT NULL

Estás usando mal el case expresión. Hay dos formas. El formulario que desea es:

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

Nota:No hay userName después del CASE .

Esto verifica cada condición deteniéndose en la primera.

MySQL interpreta los valores booleanos como un valor válido. Entonces su versión es:

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

Esto devolverá NULL .

O:

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

Presumiblemente, userName es una cadena. Esto convertirá userName a un número entero basado en los primeros dígitos. Si no hay dígitos iniciales, obtienes 0 , por lo que hay una coincidencia.