2012-07-30 9 views
7

Cómo escribir un caso en consulta MySQL que comprueba nulo o 0 para una columna en particularCaso Mysql con o condición

 

CREATE TABLE tblConfirmationStatus (Confirm_Status TINY INT) 

INSERT INTO tblConfirmationStatus 
Confirm_Status 
VALUES 
(1), 
(0), 
(1), 
({null}), 
(0), 
(1), 
({null}) 

salida requerida

ConfirmStatus

 
    Confirmed 
    Not Confirmed 
    Confirmed 
    Not Confirmed 
    Not Confirmed 
    Confirmed 
    Not Confirmed 

0 o nulo - No confirmado, 1-Confirmado

 
SELECT CASE Confirm_Status 
      WHEN NULL OR 0 THEN 'Not Confirmed' 
      ELSE 'Confirmed' END AS ConfirmStatus 
    FROM tblConfirmationStatus; 
+0

Los NULL son muy contagiosos y transforman cualquier operación Boolean/comparación normal en más valores NULL. Una declaración de caso es simplemente una buena forma de escribir 'if (confirm_status = null) ...'. Necesitas 'ISNULL()' para tratarlo adecuadamente. –

Respuesta

23

Hay dos opciones para las instrucciones CASE - la persona que envió, o:

SELECT CASE 
     WHEN Confirm_Status IS NULL OR Confirm_Status = 0 THEN 'Not Confirmed' 
     ELSE 'Confirmed' 
     END AS ConfirmStatus 

Pero probablemente podría utilizar:

SELECT CASE 
     WHEN Confirm_Status > 0 THEN 'Confirmed' 
     ELSE 'Not Confirmed' 
     END AS ConfirmStatus 

NULL es la ausencia de un valor, lo que la comprobación para valores superiores a cero debe caer en la misma categoría que cero.

+0

Gracias por la ayuda – Athi

1

¿Has echado un vistazo al operador IFNULL?

IFNULL (expr1, expr2)

Si expr1 no es NULL, IFNULL() devuelve expr1; de lo contrario, devuelve expr2. IFNULL() devuelve un valor numérico o de cadena, según el contexto en el que se utiliza.

2
SELECT IF((Confirm_Status IS NULL OR Confirm_Status = 0), 
      'Not Confirmed', 'Confirmed') AS ConfirmStatus 
FROM tblConfirmationStatus;