mysql.h


IF

IF(expr1,expr2,expr3)

Si la expr1 es TRUE (expr1 <> 0 and expr1 <> NULL) entonce IF() devuelve expr", en caso contrario, devolverá expr3. IF() devuelve un valor numérico o una cadena, dependiendo del contexto en el que se use.

mysql> SELECT IF(1>2,2,3);
        -> 3
mysql> SELECT IF(1<2,'yes','no');
        -> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
        -> 'no'

Si sólo expr2 o expr3 es explícitamente NULL, el tipo del resultado de la función IF() es el de la expresión no nula. (Este comportamiento es nuevo en MySQL 4.0.3.) expr1 se evalúa como un valor entero, lo que significa que si se están comprobando valores en coma flotante o cadenas, se debe usar siempre una operación de comparación.

mysql> SELECT IF(0.1,1,0);
        -> 0
mysql> SELECT IF(0.1<>0,1,0);
        -> 1

En el primer caso mostrado, IF(0.1) devuelve 0 porque 0.1 se convierte a un valor entero, resultando la verificación IF(0). Esto no es lo que probablemente se esperaba. En el segundo caso, la comparación comprueba el valor de punto flotante original para comprobar si es distinto de cero. El resultado de la comparación se usa como un entero. El tipo del valor de retorno por defecto para IF() (lo cual puede ser importante cuando sea almacenado en una tabla temporal) se calcula en MySQL 3.23 como sigue:

Expresión Valor de retorno
expr2 o expr3 devuelve una cadena cadena
expr2 o expr3 devuelve un valor en coma flotante coma flotante
expr2 o expr3 devuelve un entero entero

Si expr2 y expr3 son cadenas, el resultado será sensible al tipo si cualquiera de las cadenas lo es (a partir de MySQL 3.23.51).