mysql ID转换为名称_mysql 逗号分隔的id转为逗号分隔的名称

有两张表,职位表(rec_job)和职位类别表(rec_job_type),其中 rec_job 表的 all_sub_job_types 字段存的是逗号隔开的职位类别ID,rec_job 表结构如下:

+--------+---------------------------+

|      id    |   all_sub_job_types  |

+--------+---------------------------+

|  1022   |             1,4,6             |

|  1023   |             5,8,9             |

现在根据 all_sub_job_types 列的 id 字符串,从rec_job_type表查找对应的 name:

SELECT a.id,GROUP_CONCAT(b.type_name) as type_nameFROMrec_job aLEFT JOINrec_job_type bON FIND_IN_SET(b.id,a.all_sub_job_types)where id = 1022

得到结果:

c24bb579c34a82cf43a0411c5c049dc3.png

如果想将英文逗号换成中文逗号,可以用REPLACE函数或者这样写:

GROUP_CONCAT(b.type_name order by b.type_name desc separator ',')

+++++++++++++++++每次遇到类似的问题,都得百度,所以记录下来方便以后使用+++++++++++++++++++++

group_contact 函数:

它主要配合 group by 使用,起着分组时,将涉及行的相应的字段串联成一个逗号隔开的字符串,

group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc] [separator '分隔符'])

说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

需要注意的是,group_concat默认是1024 字节,所以对应字段的长度需要考虑。

FIND_IN_SET函数:

功能类似于 IN 函数,IN一般用说 id in (4,5,6,7),如果4,5,6是一个变量时,就需要用FIND_IN_SET函数。

FIND_IN_SET(str,strlist)str要查询的字符串

strlist 字段名 参数以”,”分隔 如 (1,2,6,8)

查询字段(strlist)中包含(str)的结果,返回结果为null或记录

假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在1 到 N 之间。

一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。

如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。

如果str不在strlist 或strlist 为空字符串,则返回值为 0 。

如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

##############################下面是SqlServer的用法,将1,4,6转换成文字 XX,XX,XX  #####################################

同样,还是上面那两张表:职位表(rec_job)和职位类别表(rec_job_type)

+--------+---------------------------+

|      id    |   all_sub_job_types  |

+--------+---------------------------+

|  1022   |             1,4,6             |

|  1023   |             5,8,9             |

select stuff((select ','+a.type_name fromrec_job_type awhere ','+ b.all_sub_job_types +',' like '%,'+cast(a.id as varchar(64))+',%' for xml path('') ),1,1,'') as '职位类别'

from rec_job b

--将一列的数据转成一行,逗号隔开

SELECT ',' + aa.[EName] from (select TOP (10) [EName] from [User]) aa FOR XML PATH ('')

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值