Mysql不定次拆分substring_index和help_topic(行转列)

"变速器:跳挡;转向系统:失灵;制动系统:刹车失灵;车身附件及电器:行车安全辅助系统故障"

实际开发中,偶尔会需要处理:将一个字段,根据指定字符串进行拆分,且拆分次数是不固定的情况。

如上是一个实际数据,这里演示处理上面的字符串,将数据行转列,并携带其他字段信息,以便大家做其他后续处理

数据表结构大致如下:

codedatepinpaichexiproblem class
5592772021-01-01广汽丰田汉兰达变速器:跳挡;转向系统:失灵;制动系统:刹车失灵;车身附件及电器:行车安全辅助系统故障

此处问题字段中,数据是按照“分类:内容;分类:内容;……”的形式:

① 采用冒号“:”分隔开问题和内容

② 采用分号“;”分隔开多个问题

所以此处的解决思路是:

① 先按照分号“;”,拆开多个问题为数组,并将数组实现行转列,形成多条记录;

② 再按照冒号“:”,区分开“问题”和“内容”,分开两个字段显示,即可实现效果,做其他后续分析或应用

在拆分多个问题并行转列的实现上,mysql数据库可能没有其他数据库那么方便,所以需要借助mysql库中的mysql.help_topic表来辅助实现,那么根据实际场景拆分sql是这样的:

SELECT
	date,
	pinpai,
	chexi,
	substring_index( NAME, ":", 1 ) class ,
	substring_index( NAME, ":", -1 )  cont
FROM
	(
SELECT DISTINCT
	date,
	pinpai,
	chexi,
	substring_index( substring_index( a.problem_class, ';', b.help_topic_id + 1 ), ';',- 1 ) NAME 
FROM
	spiderdata_12365_car_complain a
	JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.problem_class ) - length( REPLACE ( a.problem_class, ';', '' ) ) + 1 ) 
WHERE
	code = '559277' 
	) res

sql查询结果为:

如上,就可以实现根据指定字符串,对字段进行拆分处理,并实现行专列、其他字段信息携带的效果。

实际开发时,用户也可以根据实际情况,也可以批量处理,不拘泥于1个code。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值