mysql条件判断if和case

表结构:

#if(expr1,expr2,expr3) 表达式expr1成立(为真),则结果为expr2,否则为expr3

SELECT IF(`name`='user1', 'user1','user2') AS `result`
FROM `a`
WHERE `id` = 1;

#返回值 user1

SELECT IF(`name`='user1', 'user1','user2') AS `result`
FROM `a`
WHERE `id` = 2;

#返回user2

#嵌套

SELECT IF(`name`='user3','user3',IF(`name`='user1', 'user1','user2')) AS `result`
FROM `a`
WHERE `id` = 3;

#返回user3

#CASE表示函数开始,END表示函数结束。当有一个成立之后,后面的就不执行了。

SELECT
CASE
 WHEN `name` = 'user1'
 THEN 'user1'
 WHEN `name` = 'user2'
 THEN 'user2'
 WHEN `name` = 'user3'
 THEN 'user3'
 ELSE 'unknow'
END AS `rs`
FROM `a` WHERE `id` = 3;

#简单写法 类似php的switch

SELECT
CASE `name`
 WHEN 'user1' THEN 'user1'
 WHEN 'user2' THEN 'user2'
 WHEN 'user3' THEN 'user3'
 ELSE 'unknow'
END AS `rs`
FROM `a` WHERE `id` = 1;

需要注意的是,如果where条件指定的字段没有这条数据的时候,case不执行,不会返回unknown。

mysql拼接字符串 CONCAT()和CONCAT_WS()函数

表结构:

# CONCAT()函数用于将多个字符串连接成一个字符串,返回结果为连接参数产生的字符串

SELECT CONCAT('https://www.rootop.org/user.php?id=',`id`,'&type=user') AS `user`
FROM `a`
WHERE `id` = 2;

#返回值 https://www.rootop.org/user.php?id=2&type=user

#如有任何一个参数为NULL ,则返回值为 NULL。

SELECT CONCAT('https://www.rootop.org/user.php?id=',`id`,NULL,'&type=user') AS `user`
FROM `a`
WHERE `id` = 2;

#返回值 (NULL)

#如果是个空字符串,没有空格,返回正常

SELECT CONCAT('https://www.rootop.org/user.php?id=','', `id`) AS `user`
FROM `a`
WHERE `id` = 2;

#返回值 https://www.rootop.org/user.php?id=2

#如果有空格,就会显示出空格符

SELECT CONCAT('https://www.rootop.org/user.php?id=',' ', `id`) AS `user`
FROM `a`
WHERE `id` = 2;

#返回值 https://www.rootop.org/user.php?id= 2 2前面有个空格

#CONCAT_WS() 代表 CONCAT With Separator 第一个参数是分隔符。执行结果,分隔符会在两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。

SELECT CONCAT_WS(':','user2的id为',`id`,'类型是user') AS `content`
FROM `a`
WHERE `id` = 2;

#返回值 user2的id为:2:类型是user

#CONCAT()和CONCAT_WS()嵌套使用

SELECT CONCAT('分析开始···',CONCAT_WS(',',CONCAT_WS(':','user2的id为',`id`),'类型是user'),'···分析结束') AS `content`
FROM `a`
WHERE `id` = 2;

#返回值 分析开始···user2的id为:2,类型是user···分析结束