注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Mysql将一列以,组合成的字符串显示为转换为多行显示  

2016-09-25 21:25:34|  分类: Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前已经提及过,《Oracle将一列以,组合成的字符串显示为转换为多行显示》,但是Oracle有connect by,但Mysql可没有这个类似函数,Mysql要如何分解类似‘,’组成的字符串达到同样的效果,就得采用一些变通方法了。那么就来看看:

select SUBSTRING_INDEX(SUBSTRING_INDEX('237h.com,593668.com,9zfx.com', ',', h.help_category_id), ',', -1) AS gid from mysql.help_category h where h.help_category_id<= (LENGTH('237h.com,593668.com,9zfx.com') - LENGTH(REPLACE('237h.com,593668.com,9zfx.com', ',', ''))+1);

执行下看看效果:
Mysql将一列以,组合成的字符串显示为转换为多行显示 - sinsunson - 天朝布衣田中码农参上
是不是达成了我们的目标了,这个就仅仅是利用SUBSTRING_INDEX加上mysql.help,同样可以实现类似Oracle的connect by的效果。
在这里SUBSTRING_INDEX就不多说了,其实它就是一个按关键字截取字符串函数,说明如下:
substring_index(str,delim,count) 
说明:substring_index(被截取字段,关键字,关键字出现的次数),这里的关键字出现的次数可以是负数,如-2,则是从后倒数,到字符串结束。
示范SQL语句如下:

select SUBSTRING_INDEX(SUBSTRING_INDEX('237h.com,593668.com,9zfx.com', ',', 2),',',-1);

这样就可以取到类似用,号组成字符的相关元素。效果如下:
Mysql将一列以,组合成的字符串显示为转换为多行显示 - sinsunson - 天朝布衣田中码农参上
 
当然仅有这个函数是不能起作用的,还得结合mysql.help_category这张表,其实这张表也没有什么稀奇的,只是有从0到37连续不断的help_category_id。如果,组成的字符串层次比这个更多,那么还可以用mysql.help_topic来替换,不过这个表的help_topic_id是从0到629,当然需要修正如上的语句,或者也可以自己创建一个表并且插入连续不断的数据来作为关联表。

select help_category_id from mysql.help_category;

执行效果如下:
Mysql将一列以,组合成的字符串显示为转换为多行显示 - sinsunson - 天朝布衣田中码农参上
关键字出现的次数就是通过关联mysql.help_category的help_category_id字段来实现的,最终达成了我们的目的。
  评论这张
 
阅读(6)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017