Cómo implementar el operador condicional ternario en MySQL


89

Quiero implementar un operador condicional ternario en MySQL. Tengo una tabla en la que existe una identificación de campo. Su valor puede ser nulo. Quiero mostrar iden formato condicional ternario como este:

select id = id == null ? 0 : id;

¿Es posible en MySQL?


Respuestas:


149

Prueba esto :

select if(Id is null, 0, id) as Id;

1
Es una pena que no haya taquigrafía. Si solo desea obtener el primer valor que equivale a verdadero, debe verificar nullo ''y tal vez incluso 0. mySQL es un poco duche a veces
cronoklee

53

La documentación es tu amiga; ¡deberías leerlo!

Dice:

IFNULL(expr1,expr2)

Si expr1no es así NULL, IFNULL()vuelve expr1; de lo contrario, vuelve expr2.

Y luego muchos ejemplos. Esto es equivalente a usar un condicional ternario con una comparación NULLay el sujeto de comparación como segundo operando; que no use los símbolos ?y :que llegue allí no es realmente relevante para nada.

Entonces, en tu caso:

SELECT IFNULL(`id`, 0) FROM `table`

Si está desesperado por proporcionar tres operandos explícitamente (¿por qué?), Cambie a IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`

4
+1, pero para responder a la pregunta:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - hacker

@ MichaelKrelin-hacker: Lo mismo, ¿no? Y IFNULLes más terso.
Lightness Races in Orbit

@ MichaelKrelin-hacker: Oh, lo entiendo.
Lightness Races in Orbit

Claro, solo para responder a la pregunta sobre ternario :)
Michael Krelin - hacker

En mi caso, necesito usar en IFlugar de IFNULLo COALESCEporque estoy migrando datos a una base de datos de otro proveedor y no quiero importar los valores no nulos, solo interpretarlos como un estado genérico. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statusfunciona para mi.
Adam Elsodaney

22

Hay dos formas de implementar la misma lógica que un operador ternario:

  1. Utilice la IFfunción, por ejemplo.IF(expression, true result, false result)
  2. Utilice la CASEexpresión, por ejemplo.

    CASE WHEN expression THEN <true result> ELSE <false_result> END
    

Cuando está buscando NULL, puede usar las funciones IFNULLo COALESCE, por ejemplo.

IFNULL(ID, 0)
COALESCE(ID, 0)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.