本文主要介绍了几个mysql字段拼接实例的详细讲解,有很好的参考价值,希望对大家有所帮助。来和边肖一起看看吧。
Mysql查询结果行字段拼接可以通过以下两个函数实现:
1. concat函数
mysql从测试中选择concat('1 ',' 2 ',' 3 ');
-
| concat('1 ',' 2 ',' 3') |
-
| 123 |
-
如果连接字符串中有NULL,则返回的结果为NULL:
mysql select concat('1 ',' 2 ',NULL,' 3 ')from test;
-
| concat('1 ',' 2 ',NULL,' 3') |
-
| NULL |
-
2. concat_ws函数
Concat(分隔符,str1,str2,)代表带分隔符的concat,是concat()的一种特殊形式。第一个参数是其他参数的分隔符。分隔符放在要连接的两个字符串之间。分隔符可以是字符串或其他参数。
mysql select concat_ws(':',' 1 ',' 2 ',' 3 ')from test;
-
| concat_ws(':',' 1 ',' 2 ',' 3') |
-
| 1:2:3 |
-
如果分隔符为空,则返回的结果为空:
mysql select concat_ws(NULL,' 1 ',' 2 ',' 3 ')from test;
-
| concat_ws(NULL,' 1 ',' 2 ',' 3') |
-
| NULL |
-
如果参数中存在NULL,将被忽略:
mysql select concat_ws(':',' 1 ',' 2 ',NULL,NULL,NULL,' 3 ')from test;
-
| concat_ws(':',' 1 ',' 2 ',NULL,NULL,NULL,' 3') |
-
| 1:2:3 |
-
您可以判断NULL并用其他值替换它:
mysql select concat_ws(':',' 1 ',' 2 ',ifNULL(NULL,' 0 '),' 3 ')from bank limit 1;
-
| concat_ws(':',' 1 ',' 2 ',ifNULL(NULL,' 0 '),' 3') |
-
| 1:2:0:3 |
-
补充:补充:mysql中分组时将某个字段的值进行拼接
t_dog表
t_vaccine表
t_dog_vaccine表
问题描述
我需要在dog_vaccine中找出每只狗对应的疫苗。因为狗和疫苗是多对多的,一只狗可能对应多个疫苗,但是我想把这些疫苗通过字符串拼接成一个,然后映射到java实体类。
一步步解决
我使用了两个左连接查询来连接三个表:t_dog表、t_vaccine表和t_dog_vaccine表。
选择dv.id作为id,
d .狗名作为狗名,v .疫苗名
从
t _狗_疫苗dv
dv上左连接t _ dog d . dog _ id=d . id
左连接dv上的t _ vaccine v . vaccine _ id=v . id
虽然狗和疫苗是匹配的,但是每只狗都有多条记录,我只想要一只狗的名字和多个vaccine_name值组合成一个字符串的数据。想了想,突然想到了Groupby。
选择dv.id作为id,
d .狗名作为狗名,v .疫苗名
从
t _狗_疫苗dv
dv上左连接t _ dog d . dog _ id=d . id
左连接dv上的t _ vaccine v . vaccine _ id=v . id
按狗名分组
用group by显然不是我想到的结果。虽然只有一个狗名,但是对应的疫苗也只有一种。我想要多个疫苗名称,该怎么办?有没有可以拼接字符串的功能?Emmmmm,知道了,group_concat。
选择dv.id作为id,
d.dog_name作为dogName,
group_concat(v.vaccine_name)作为dogVaccineName
从
t _狗_疫苗dv
dv上左连接t _ dog d . dog _ id=d . id
左连接dv上的t _ vaccine v . vaccine _ id=v . id
按d.dog_name分组
这样才能达到我想要的效果。
group_concat用法
默认用法
select group _ concat(vaccine _ name)as dog vaccine name from t _ vaccine where id in(select vaccine _ id from t _ dog _ vaccine where dog _ id=1)
group_concat拼接的默认分隔符是','。如果我们想改变这个分隔符,我们可以这样做。
替换(group _ concat (vaccine _ name),',','在此处填写要更改的分隔符)
比如我想把默认改成;
select REPLACE(group _ concat(vaccine _ name),',',';')作为来自t _ vaccine where id in(select vaccine _ id from t _ dog _ vaccine where dog _ id=1)的dogVaccineName
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。如有错误或不足之处,请不吝赐教。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。