CONCAT函数
格式:SELECT CONCAT(str1,str2,...) FROM [表名];
将多个字段拼接为一个字段 (字符串 str1,str2 等多个字符串合并为一个字符串,多个字符串之间用逗号分隔)
可以有很多个参数,如果参数有一个是NULL,则结果返回NULL(使用CONCAT()函数对包含NULL的数据进行拼接时,结果为NULL,所以在对数据进行拼接之前,应该先检查要拼接的字段是否存在NULL)
适合场景: 1.组合多列信息为一列 2.对列的信息进行补充
-- 结果是MySQL
SELECT CONCAT('My', 'S', 'QL');
-- 结果是SQL Runoob Gooogle Facebook
SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook")
-- 结果是Null
SELECT CONCAT('My', NULL, 'QL');
-- 一个数字参数被变换为等价的字符串形式
-- 结果是143
SELECT CONCAT(14,3);
CONCAT_WS函数
格式:SELECT CONCAT_WS(‘拼接符’,str1,str2,...) FROM [表名];
同CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上拼接符
适合场景: 多字段拼接,字段间使用同样的拼接符(会自动跳过NULL)
-- 结果是red_blue_green
SELECT CONCAT_WS("_", "red", "blue", "green");
-- 结果是hello-word-is-fun!
SELECT CONCAT_WS("-", "hello", "world", "is", "fun!");
示例
查询 t_supplier_goods 表中,supplier_no 或者 goods_name 这两个字段中出现 “音乐” 的数据,一般想到的是用 or
select * from t_supplier_goods where supplier_no like '%音乐%' or goods_name like '%音乐%'
这样写有个弊端,就是随着字段的增多,例如多个字段中出现“音乐” 的数据。这样sql就很难写。因此使用 CONCAT_WS 函数。
select * from t_supplier_goods where CONCAT_WS('',supplier_no,goods_name) like '%音乐%'
从效果上看,使用 or 和使用 CONCAT_WS 函数执行得到的数据是一样的