在MySQL中,实现字符串拼接主要有以下3种函数:
- concat(x,y,...)
- concat_ws(分隔符,x,y,...)
- group_concat(distinct xxx order by asd/desc yyy separator '分隔符')
一、concat函数
concat()函数用于将多个字符串连接成一个字符串
格式:concat(str1,str2,...)
-- mysql concat() --
SELECT CONCAT('I','love','somebody'); # Ilovesomebody
SELECT CONCAT('I',NULL,'somebody'); # NULL
SELECT CONCAT(14.4); # 14.4
注意:
- 如果有任何一个参数为NULL,则返回值为NULL;
- 如果所有参数为非二进制字符串,则返回非二进制字符串;
- 如果含有任一二进制字符串,则返回一个二进制字符串;
- 数字参数也会被转化为与之相等的二进制字符串格式,若要避免这种情况,可使用显式类型 cast,例如:
SELECT CONCAT(CAST(col_a AS CHAR), col_b) FROM table_xxx;
二、concat_ws函数
concat_ws函数,concat with separator 分隔符,是concat()的特殊形式。
格式:concat_ws(separator, str1, str2,...)
- 第一个参数为分隔符,放在两个要连接的字符串之间。
SELECT CONCAT_WS('-','First','Second','Third'); # First-Second-Third
SELECT CONCAT_WS('-','First',NULL,'Third'); # First-Third
注意:
- 如果分隔符为NULL,则结果为NULL;
- 函数会忽略任何分隔符参数后的NULL值;
- 函数不会忽略任何空字符串,但是会忽略所有NULL值;
三、group_concat函数
group_concat函数,实现分组查询之后的数据进行合并,并返回一个字符串结果。
格式:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
- 通过使用distinct可以排除重复值;
- 如果希望对结果中的值进行排序,可以使用order by子句;
- separator是一个字符串值,默认为逗号分隔。
SELECT id,
GROUP_CONCAT(DISTINCT num ORDER BY num DESC SEPARATOR '$') AS cont
FROM test.t_2
GROUP BY id;
结果:
group_concat还可以与concat_ws嵌套使用,实现更加复杂功能。
四、其他字符串连接杂谈
- “+” & || (不行)
- Mysql使用“+”进行字符拼接的时候,会尝试将两端的字段值转换为数字类型,如果转换失败则认为字段值为0
- oracle使用||进行字符串拼接,concat 只支持2个参数,可以多个嵌套使用
- MS 使用+进行字符串拼接
END 2018-05-18 15:02:49