MySQL IF()、IFNULL()和CASE()的用法(附带实例)
条件判断函数也称为控制流程函数,根据满足的不同条件,执行相应的流程。
MySQL 中进行条件判断的函数有 IF()、IFNULL() 和 CASE()。本节将分别介绍各个函数的用法。
【实例】使用 IF() 函数进行条件判断,SQL 语句如下:
【实例】使用 IFNULL() 函数进行条件判断,SQL 语句如下:
第一种语法格式如下:
【实例】使用 CASE expr WHEN 语句执行分支操作,SQL 语句如下:
CASE 的第二种语法格式如下:
【实例】使用 CASE WHEN 语句执行分支操作,SQL 语句如下:
提示,一个 CASE 表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定:
MySQL 中进行条件判断的函数有 IF()、IFNULL() 和 CASE()。本节将分别介绍各个函数的用法。
MySQL IF()函数
IF() 函数的语法格式如下:IF(expr, v1, v2)如果表达式 expr 是 TRUE(expr <> 0 and expr <> NULL) ,则返回值为 v1;否则返回值为 v2。IF() 的返回值为数字或字符串,具体取决于其所在的语境。
【实例】使用 IF() 函数进行条件判断,SQL 语句如下:
SELECT IF(1>2,2,3), IF(1<2,'yes ','no'), IF(STRCMP('test','test1'),'no','yes'); +-------------+---------------------+---------------------------------------+ | IF(1>2,2,3) | IF(1<2,'yes ','no') | IF(STRCMP('test','test1'),'no','yes') | +-------------+---------------------+---------------------------------------+ | 3 | yes | no | +-------------+---------------------+---------------------------------------+
- 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 表达式的结果类型。
MySQL IFNULL()函数
IFNULL() 函数的语法格式如下:IFNULL(v1,v2)如果 v1 不为 NULL,则 IFNULL() 的返回值为 v1;否则返回值为 v2。IFNULL() 的返回值是数字或者字符串,具体取决于其所在的语境。
【实例】使用 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”。
MySQL CASE()函数
CASE() 函数有两种语法格式。第一种语法格式如下:
CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2]...[ELSE rn+1] END如果 expr 值等于某个 vn,则返回对应 THEN 后面的结果;如果 expr 值与所有值都不相等,则返回 ELSE 后面的 rn+1。
【实例】使用 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。
【实例】使用 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 表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定:
- 如果用在字符串语境中,则返回结果为字符串;
- 如果用在数字语境中,则返回结果为十进制值、实数值或整数值。