2011-12-14 36 views
48

Quiero implementar el operador condicional ternario en MySQL. Tengo una tabla en la que existe una identificación de campo. Su valor puede ser nulo. Quiero mostrar id en formato condicional ternario así:Cómo implementar el operador condicional ternario en MySQL

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

¿Es posible en MySQL?

+0

posible duplicado de [¿Cómo se escribe un condicional en una instrucción de selección MySQL?] (Http://stackoverflow.com/questions/1647961/how-do-you-write-a-conditional-in- a-mysql-select-statement) –

Respuesta

94

Prueba esto:

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

The documentation es tu amigo; ¡deberías leerlo!

Dice:

IFNULL(expr1,expr2) 

Si expr1 no es NULL, IFNULL() vuelve expr1; de lo contrario, devuelve expr2.

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

Así, en su caso:

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

Si estás desesperado para proporcionar tres operandos de forma explícita (por qué ?!), luego cambiar a IF:

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

+1, pero para responder a la pregunta: 'CASE WHEN id ES NULL THEN 0 ELSE id END' –

+0

@ MichaelKrelin-hacker: ¿Lo mismo, no? Y 'IFNULL' es más terser. –

+0

@ MichaelKrelin-hacker: Oh, lo entiendo. –

14

Hay dos maneras en que puede implementar la misma lógica que un operador ternario:

  1. Utilice la función IF, p. Ej. IF(expression, true result, false result)
  2. Utilice la expresión CASE, p. Ej.

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

cuando se está comprobando para NULL continuación, puede utilizar los IFNULL o COALESCE funciones, por ejemplo.

IFNULL(ID, 0) 
COALESCE(ID, 0) 
Cuestiones relacionadas