Mysql内置条件判断函数

Mysql内置条件判断函数

Posted by WangZiTao on Saturday, March 16, 2019

常见的条件判断函数

NameDescription
CASECase operator
IF()If/else construct
IFNULL()Null if/else construct
NULLIF(expr1,expr2)Return NULL if expr1 = expr2

CASE

为了后面容易举例子,我们先创建一张表并插入数据

CREATE TABLE demo ( 
id INT,
NAME VARCHAR ( 20 ),
age INT
) ENGINE = INNODB;

insert into demo values (1,"小明",13), (1,"小红",28), (1,"老李",61);

case 包含两种表达格式:

CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result …] [ELSE result] END 规则:当查询的结果当value = compare_value时返回result。

SELECT 
   NAME,
CASE
   NAME 
   	WHEN '小明' THEN '少年' 
   	WHEN '小红' THEN '中年' 
   	WHEN '老李' THEN '老年' 
   END 'Type' 
FROM
   demo;

结果:

NAMEType
小明少年
小红中年
老李老年

CASE WHEN [condition] THEN result [WHEN [condition] THEN result …] [ELSE result] END 规则:当condition为TRUE时返回result,当结果不符合时,返回else后结果,当没有else部分时,为NULL。

SELECT 
	NAME,
CASE 
		WHEN age < 18 THEN '少年' 
		WHEN age >= 25 AND age < 50 THEN '中年' 
		WHEN age >= 50 THEN '老年' 
		ELSE '其他'
	END 'Type' 
FROM
	demo;

结果:

NAMEType
小明少年
小红中年
老李老年

IF()

IF(expr1,expr2,expr3), 当expr1为TRUE (expr1 <> 0 and expr1 <> NULL)时, IF() 返回 expr2. 否则, 结果为 expr3.

mysql> SELECT IF(1>2,2,3);
        -> 3
mysql> SELECT IF(1<2,'yes','no');
        -> 'yes'

IFNULL()

IFNULL(expr1,expr2),如果 expr1 L不为空时, IFNULL() 返回 expr1; 否则返回 expr2.

mysql> SELECT IFNULL(1,0);
        -> 1
mysql> SELECT IFNULL(NULL,10);
        -> 10
mysql> SELECT IFNULL(1/0,10);
        -> 10
mysql> SELECT IFNULL(8%5,'yes');
        -> 3

NULLIF()

NULLIF(expr1,expr2), 当 expr1 = expr2 时,返回NULL, 否则返回 expr1. 这个语句相当于 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.

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

参考文档

MySQL官方文档


comments powered by Disqus