购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.5 条件判断函数

条件判断函数也称为控制流程函数,根据满足的不同条件,执行相应的流程。MySQL中进行条件判断的函数有IF()、IFNULL()和CASE()。本节将分别介绍各个函数的用法。

4.5.1 IF()函数

IF()函数的语法格式如下:

    IF(expr, v1, v2)

如果表达式expr是TRUE(expr <> 0 and expr <> NULL),则返回值为v1;否则返回值为v2。IF()的返回值为数字或字符串,具体取决于其所在的语境。

例4.85 】使用IF()函数进行条件判断,SQL语句如下:

1>2的结果为FALSE,因此IF(1>2,2,3)返回第二个表达式的值;1<2的结果为TRUE,因此IF(1<2,'yes ', 'no')返回第一个表达式的值;“test”小于“test1”,结果为true,因此IF(STRCMP('test','test1'),'no','yes')返回第一个表达式的值。

提示 如果v1和v2中只有一个明确是NULL,则IF()函数的结果类型为非NULL表达式的结果类型。

4.5.2 IFNULL()函数

IFNULL()函数的语法格式如下:

    IFNULL(v1,v2)

如果v1不为NULL,则IFNULL()的返回值为v1;否则返回值为v2。IFNULL()的返回值是数字或者字符串,具体取决于其所在的语境。

例4.86 】使用IFNULL()函数进行条件判断,SQL语句如下:

    mysql> SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(1/0, 'wrong');
    +-------------+-----------------+----------------------+
    | IFNULL(1,2) | IFNULL(NULL,10) | IFNULL(1/0, 'wrong') |
    +-------------+-----------------+----------------------+
    |        1     |           10    | wrong                |
    +-------------+-----------------+----------------------+

虽然IFNULL(1,2)的第二个值也不为空,但返回结果依然是第一个值;IFNULL(NULL,10)的第一个值为空,因此返回10;“1/0”的结果为空,因此IFNULL(1/0, 'wrong')返回字符串“wrong”。

4.5.3 CASE()函数

CASE()函数有两种语法格式,第一种语法格式如下:

    CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2]...[ELSE rn+1] END

如果expr值等于某个vn,则返回对应THEN后面的结果;如果expr值与所有值都不相等,则返回ELSE后面的rn+1。

例4.87 】使用CASE expr WHEN语句执行分支操作,SQL语句如下:

    mysql> SELECT CASE 2 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;
    +------------------------------------------------------------------+
    | CASE 2 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END       |
    +------------------------------------------------------------------+
    | two                                                              |
    +------------------------------------------------------------------+

expr值为2,与第二条分支语句WHEN后面的值相等,因此返回结果为“two”。

CASE的第二种语法格式如下:

    CASE  WHEN v1 THEN r1 [WHEN v2 THEN r2]... ELSE rn+1] END

某个vn值为TRUE时,返回对应THEN后面的结果;如果所有值都不为TRUE,则返回ELSE后的rn+1。

例4.88 】使用CASE WHEN语句执行分支操作,SQL语句如下:

    mysql> SELECT CASE WHEN 1<0 THEN 'true' ELSE 'false' END;
    +------------------------------------------------------------+
    | CASE WHEN 1<0 THEN 'true' ELSE 'false' END                |
    +------------------------------------------------------------+
    | false                                                      |
    +------------------------------------------------------------+

1<0的结果为FALSE,因此函数返回值为ELSE后面的“false”。

提示 一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。如果用在字符串语境中,则返回结果为字符串;如果用在数字语境中,则返回结果为十进制值、实数值或整数值。 p/DyN0yWrb/UbHDNy0vVQ+ebmEEBf4m39NYLwhY5HG7uVCs50kZaaKTfdWWfKERg

点击中间区域
呼出菜单
上一章
目录
下一章
×