背景:做SQL查询时会经常必要,把查询的结果拼接成一个字符串。
办理方法: 通过group_concat函数
拼接的结果很长,导致拼接结果表现不全,可以通过以下方法办理。
在每次查询前执行SET SESSION group_concat_max_len = 10240;
或者SET GLOBALgroup_concat_max_len = 10240;
使得查询结果值变大。
增补:SQL server 的 拼接SQL如下:
- selectstuff(( select ','+ requestid from nccombinedpayment for xml path('')),1,1,'') as requestid ;
复制代码
增补函数方法:
使用的例子均在下面的数据库表tt2下执行:
一、concat()函数
1、功能:将多个字符串毗连成一个字符串。
2、语法:concat(str1, str2,...)
返回结果为毗连参数产生的字符串,假如有任何一个参数为null,则返回值为null。
3、举例:
例1:- select concat (id, name, score) as info from tt2;
复制代码
中央有一举动null是因为tt2表中有一行的score值为null。
例2:在例1的结果中三个字段id,name,score的组合没有分隔符,我们可以加一个逗号作为分隔符:
如许看上去似乎顺眼了很多~~
但是输入sql语句贫苦了很多,三个字段必要输入两次逗号,假如10个字段,要输入九次逗号...贫苦死了啦,有没有什么轻便方法呢?——于是可以指定参数之间的分隔符的concat_ws()来了!!!
二、concat_ws()函数
1、功能:和concat()一样,将多个字符串毗连成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)
2、语法:concat_ws(separator, str1, str2, ...)
阐明:第一个参数指定分隔符。必要留意的是分隔符不能为null,假如为null,则返回结果为null。
3、举例:
例3:我们使用concat_ws()将 分隔符指定为逗号,到达与例2雷同的结果:
例4:把分隔符指定为null,结果全部变成了null:
三、group_concat()函数
媒介:在有group by的查询语句中,select指定的字段要么就包罗在group by语句的背面,作为分组的依据,要么就包罗在聚合函数中。(有关group by的知识请戳:浅析SQL中Group By的使用)。
例5:
该例查询了name雷同的的人中最小的id。假如我们要查询name雷同的人的所有的id呢?
当然我们可以如许查询:
例6:
但是如许同一个名字出现多次,看上去非常不直观。有没有更直观的方法,既让每个名字都只出现一次,又能够表现所有的名字雷同的人的id呢?——使用group_concat()
1、功能:将group by产生的同一个分组中的值毗连起来,返回一个字符串结果。
2、语法:group_concat( [distinct] 要毗连的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
阐明:通过使用distinct可以排除重复值;假如渴望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
3、举例:
例7:使用group_concat()和group by表现雷同名字的人的id号:
例8:将上面的id号从大到小排序,且用'_'作为分隔符:
例9:上面的查询中表现了以name分组的每组中所有的id。接下来我们要查询以name分组的所有组的id和score:
到此这篇关于sql查询结果列拼接成逗号分隔的字符串方法的文章就介绍到这了,更多相干sql 逗号分隔字符串内容请搜刮草根技能分享从前的文章或继承欣赏下面的相干文章渴望各人以后多多支持草根技能分享! |