Mysql不定次拆分substring"/>
Mysql不定次拆分substring
"变速器:跳挡;转向系统:失灵;制动系统:刹车失灵;车身附件及电器:行车安全辅助系统故障"
实际开发中,偶尔会需要处理:将一个字段,根据指定字符串进行拆分,且拆分次数是不固定的情况。
如上是一个实际数据,这里演示处理上面的字符串,将数据行转列,并携带其他字段信息,以便大家做其他后续处理
数据表结构大致如下:
code | date | pinpai | chexi | problem class |
559277 | 2021-01-01 | 广汽丰田 | 汉兰达 | 变速器:跳挡;转向系统:失灵;制动系统:刹车失灵;车身附件及电器:行车安全辅助系统故障 |
此处问题字段中,数据是按照“分类:内容;分类:内容;……”的形式:
① 采用冒号“:”分隔开问题和内容
② 采用分号“;”分隔开多个问题
所以此处的解决思路是:
① 先按照分号“;”,拆开多个问题为数组,并将数组实现行转列,形成多条记录;
② 再按照冒号“:”,区分开“问题”和“内容”,分开两个字段显示,即可实现效果,做其他后续分析或应用
在拆分多个问题并行转列的实现上,mysql数据库可能没有其他数据库那么方便,所以需要借助mysql库中的mysql.help_topic表来辅助实现,那么根据实际场景拆分sql是这样的:
SELECTdate,pinpai,chexi,substring_index( NAME, ":", 1 ) class ,substring_index( NAME, ":", -1 ) cont
FROM(
SELECT DISTINCTdate,pinpai,chexi,substring_index( substring_index( a.problem_class, ';', b.help_topic_id + 1 ), ';',- 1 ) NAME
FROMspiderdata_12365_car_complain aJOIN mysql.help_topic b ON b.help_topic_id < ( length( a.problem_class ) - length( REPLACE ( a.problem_class, ';', '' ) ) + 1 )
WHEREcode = '559277' ) res
sql查询结果为:
如上,就可以实现根据指定字符串,对字段进行拆分处理,并实现行专列、其他字段信息携带的效果。
实际开发时,用户也可以根据实际情况,也可以批量处理,不拘泥于1个code。
更多推荐
Mysql不定次拆分substring
发布评论