12.2. Funciones de control de flujo

MySQL 5.0

12.2. Funciones de control de flujo

  • WHEN [] THEN [WHEN [] THEN ...] [ELSE ] END, ] THEN [WHEN [] THEN ...] [ELSE ] END

    La primera versión retorna donde =. La segunda versión retorna el resultado para la primera condición que es cierta. Si no hay ningún resultado coincidente, el resultado tras se retorna, o si no hay parte .

    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 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 carácteres, el resultado se retorna como cadena de carácteres. Si se usa en un contexto numérico, el resultado se retorna como valor decimal, real o entero.

  • ,,)

    Si es TRUE ( <> 0 and <> NULL) entonces retorna ; de otro modo retorna . retorna un valor numérico o cadena de carácteres, 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 o es explícitamente , el tipo del resultado de la función es el mismo tipo que la expresión no .

    se evalúa como un valor entero, que significa que si esta testeando valores de punto flotante o cadenas de carácteres, 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, retorna 0 ya que 0.1 se convierte a un valor entero, resultando en un test de . 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 (que puede ocurrir cuando se almacena en una tabla temporal) se calcula como sigue:

    Expresión Valor Retornado
    o retorna una cadena cadena de carácteres
    o retorna un valor de coma flotante coma flotante
    o retorna un entero entero

    Si y son cadenas de carácteres, el resultado es sensible a mayúsculas si alguna de las cadenas lo es.

  • ,)

    Si no es , retorna , de otro modo retorna . retorna un valor numérico o de cadena de carácteres, 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 ,) es el más “general” de las dos expresiones, en el orden , , o . Considere el caso de una tabla basada en expresiones o donde MySQL debe almacenar internamente un valor retornado por en una tabla temporal:

    CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
    

    En este ejemplo, el tipo de la columna es .

  • ,)

    Retorna si = es cierto, de otro modo retorna . Es lo mismo que = THEN NULL ELSE END.

    mysql> SELECT NULLIF(1,1);
            -> NULL
    mysql> SELECT NULLIF(1,2);
            -> 1
    

    Tenga en cuenta que MySQL evalúa dos veces si los argumentos no son iguales.