DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(mysql.info.gz) Control flow functions

Info Catalog (mysql.info.gz) Non-typed Operators (mysql.info.gz) Functions (mysql.info.gz) String functions
 
 12.2 Control Flow Functions
 ===========================
 
 `CASE VALUE WHEN [COMPARE-VALUE] THEN RESULT [WHEN [COMPARE-VALUE] THEN RESULT ...] [ELSE RESULT] END'
 
 `CASE WHEN [CONDITION] THEN RESULT [WHEN [CONDITION] THEN RESULT ...] [ELSE RESULT] END'
      The first version returns the RESULT where `VALUE=COMPARE-VALUE'.
      The second version returns the result for the first condition that
      is true. If there was no matching result value, the result after
      `ELSE' is returned, or `NULL' if there is no `ELSE' part.
 
           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
 
      The type of the return value (`INTEGER', `DOUBLE', or `STRING') is
      the same as the type of the first returned value (the expression
      after the first `THEN').
 
      `CASE' was added in MySQL 3.23.3.
 
 `IF(EXPR1,EXPR2,EXPR3)'
      If EXPR1 is TRUE (`EXPR1 <> 0' and `EXPR1 <> NULL') then `IF()'
      returns EXPR2, else it returns EXPR3.  `IF()' returns a numeric or
      string value, depending on the context in which it is used.
 
           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'
 
      If only one of `expr2' or `expr3' is explicitly `NULL', the result
      type of the `IF()' function is the type of non-`NULL' expression.
      (This behavior is new in MySQL 4.0.3.)
 
      `expr1' is evaluated as an integer value, which means that if you
      are testing floating-point or string values, you should do so
      using a comparison operation.
 
           mysql> SELECT IF(0.1,1,0);
                   -> 0
           mysql> SELECT IF(0.1<>0,1,0);
                   -> 1
 
      In the first case shown, `IF(0.1)' returns `0' because `0.1' is
      converted to an integer value, resulting in a test of `IF(0)'.
      This may not be what you expect.  In the second case, the
      comparison tests the original floating-point value to see whether
      it is non-zero.  The result of the comparison is used as an
      integer.
 
      The default return type of `IF()' (which may matter when it is
      stored into a temporary table) is calculated in MySQL 3.23 as
      follows:
 
      *Expression*                       *Return
                                         Value*
      `expr2' or `expr3' returns a       string
      string                             
      `expr2' or `expr3' returns a       floating-point
      floating-point value               
      `expr2' or `expr3' returns an      integer
      integer                            
 
      If `expr2' and `expr3' are strings, the result is case sensitive
      if either string is case sensitive (starting from MySQL 3.23.51).
 
 `IFNULL(EXPR1,EXPR2)'
      If EXPR1 is not `NULL', `IFNULL()' returns EXPR1, else it returns
      EXPR2.  `IFNULL()' returns a numeric or string value, depending on
      the context in which it is used.
 
           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'
 
      In MySQL 4.0.6 and above, the default result value of
      `IFNULL(EXPR1,EXPR2)' is the more "general" of the two expressions,
      in the order `STRING', `REAL', or `INTEGER'. The difference from
      earlier MySQL versions is mostly notable when you create a table
      based on expressions or MySQL has to internally store a value from
      `IFNULL()' in a temporary table.
 
           CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
 
      As of MySQL 4.0.6, the type for the `test' column is `CHAR(4)',
      whereas in earlier versions the type would be `BIGINT'.
 
 `NULLIF(EXPR1,EXPR2)'
      Returns `NULL' if `EXPR1 = EXPR2' is true, else returns EXPR1.
      This is the same as `CASE WHEN EXPR1 = EXPR2 THEN NULL ELSE EXPR1
      END'.
 
           mysql> SELECT NULLIF(1,1);
                   -> NULL
           mysql> SELECT NULLIF(1,2);
                   -> 1
 
      Note that MySQL evaluates `expr1' twice if the arguments are not
      equal.
 
      `NULLIF()' was added in MySQL 3.23.15.
 
 
Info Catalog (mysql.info.gz) Non-typed Operators (mysql.info.gz) Functions (mysql.info.gz) String functions
automatically generated byinfo2html