CASE ,
          value WHEN
          [compare-value] THEN
          result [WHEN
          [compare-value] THEN
          result ...] [ELSE
          result] ENDCASE WHEN [
        condition] THEN
          result [WHEN
          [condition] THEN
          result ...] [ELSE
          result] END
          La primera versión retorna result
          donde
          value=compare-valueELSE se
          retorna, o NULL si no hay parte
          ELSE.
        
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
    ->     WHEN 2 THEN 'two' ELSE 'more' END;
        -> 'one'
mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
        -> 'true'
mysql> SELECT CASE BINARY 'B'
    ->     WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
        -> NULL
          El tipo de retorno por defecto de una expresión
          CASE es el tipo agregado compatible de
          todos los valores de retorno, pero también depende del
          contexto en el que se usa. Si se usa en un entorno de cadenas
          de caracteres, el resultado se retorna como cadena de
          caracteres. Si se usa en un contexto numérico, el resultado
          se retorna como valor decimal, real o entero.
        
          IF(
        expr1,expr2,expr3)
          Si expr1 es TRUE
          (expr1 <>
          0expr1
          <> NULLIF()
          retorna expr2; de otro modo retorna
          expr3. IF()
          retorna un valor numérico o cadena de caracteres, en función
          del contexto en que se usa.
        
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 una de expr2 o
          expr3 es explícitamente
          NULL, el tipo del resultado de la función
          IF() es el mismo tipo que la expresión no
          NULL .
        
          expr1 se evalúa como un valor entero, que
          significa que si esta testeando valores de punto flotante o
          cadenas de caracteres, debe hacerlo mediante operaciones 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) retorna
          0 ya que 0.1 se convierte a un valor entero, resultando en un
          test de IF(0). Puede que esto no ea lo que
          espera. En el segundo caso, la comparación testea el valor de
          coma flotante para comprobar que no es cero. El resultado de
          la comparación se usa como entero.
        
          El tipo de retorno de IF() (que puede
          ocurrir cuando se almacena en una tabla temporal) se calcula
          como sigue:
        
| Expresión | Valor Retornado | 
| expr2oexpr3retorna una cadena | cadena de caracteres | 
| expr2oexpr3retorna un valor de
                  coma flotante | coma flotante | 
| expr2oexpr3retorna un entero | entero | 
          Si expr2 y expr3 son
          cadenas de caracteres, el resultado es sensible a mayúsculas
          si alguna de las cadenas lo es.
        
          IFNULL(
        expr1,expr2)
          Si expr1 no es
          NULL, IFNULL() retorna
          expr1, de otro modo retorna
          expr2. IFNULL()
          retorna un valor numérico o de cadena de caracteres, en
          función del contexto en que se usa.
        
mysql> SELECT IFNULL(1,0);
        -> 1
mysql> SELECT IFNULL(NULL,10);
        -> 10
mysql> SELECT IFNULL(1/0,10);
        -> 10
mysql> SELECT IFNULL(1/0,'yes');
        -> 'yes'
          El valor por defecto de retorno de
          IFNULL(
          es el más “general” de las dos expresiones, en
          el orden expr1,expr2)STRING, REAL, o
          INTEGER. Considere el caso de una tabla
          basada en expresiones o donde MySQL debe almacenar
          internamente un valor retornado por
          IFNULL() en una tabla temporal:
        
mysql>CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;mysql>DESCRIBE tmp;+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | test | varbinary(4) | NO | | | | +-------+--------------+------+-----+---------+-------+
          En este ejemplo, el tipo de la columnatest
          es VARBINARY(4).
        
          NULLIF(
        expr1,expr2)
          Retorna NULL si
          expr1 =
          expr2expr1. Es lo mismo que
          CASE WHEN .
        expr1 =
          expr2 THEN NULL ELSE
          expr1 END
mysql> SELECT NULLIF(1,1);
        -> NULL
mysql> SELECT NULLIF(1,2);
        -> 1
          Tenga en cuenta que MySQL evalúa expr1 dos
          veces si los argumentos no son iguales.
        
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

