Cómo implementar el operador condicional ternario en MySQL

Respuestas:

149

Prueba esto :

select if(Id is null, 0, id) as Id;
Dewasish Mitruka
fuente
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`
Carreras de ligereza en órbita
fuente
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)
Arkansas
fuente