一、字符串连接
1、CONCAT(string1,string2,…)
说明 : string1,string2代表字符串,concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
SELECT CONCAT('1','2',NULL) FROM DUAL 结果返回NULL, SELECT CONCAT('1','2','3') FROM DUAL 运行结果返回123
2、CONCAT_WS(separator,str1,str2,...)
说明 : string1,string2代表字符串,concat_ws 代表 concat with separator,第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。
SELECT CONCAT_WS("#",'1','2','3') FROM DUAL 结果返回1#2#3, SELECT CONCAT_WS(NULL,'1','2','3') FROM DUAL结果返回NULL
3、GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
例如:SELECT uid, GROUP_CONCAT(authority_cd ORDER BY authority_cd DESC SEPARATOR ' ## ') role
FROM user GROUP BY uid;
uid role
1 USER ## OPERATOR ## AUDITOR ## ADMIN
对于同一个uid的role按照降序排序并以##分隔符隔开
二、判断是否包含
1、SELECT * FROM test WHERE email LIKE "%@email.com%"
此方法效率不是很高,所以一般不是很常用
2、利用MySQL 字符串函数 FIND_IN_SET(str,strlist) strlist是以逗号隔开的字符串列表(,)比如 '1,2,3,4'
SELECT * FROM test WHERE FIND_IN_SET('4', '1,2,3,4'); 如果存在则返回其str所在strlist中的索引值,需要注意的是索引不是从0开始的;不存在,返回的是0;
SELECT FIND_IN_SET('4','1,2,,,,,,5,,') FROM DUAL,返回的结果是0 ; SELECT FIND_IN_SET('4','1,4,,4,,,,5,,') FROM DUAL 返回的结果是2,并且返回的是首个符合条件的。
3、使用LOCATE(substr, str)函数,如果包含,返回>0的数,否则返回0 ,此函数表示的是指定的子串是否在字符串中出现,同样是返回的首个子串索引
SELECT LOCATE('4','1,123,4') FROM DUAL 返回结果是 7 ,也是从1开始计算的索引值
笔者会根据实际使用到的情况,会不定期进行补充更新。