欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用substring_index根据某分隔符分散处理mysql的字段数据

程序员文章站 2022-06-01 14:15:06
...

文字描述有些苦涩,也不好理解,直接上图。

比如数据库中 test表存在如下数据:

id path
1 0,10,52,215,641,
2 0,32,167,
3 0,24,128,414,
4 0,23,

注:测试数据中path最多5层,处理时,可以按照需求来修改sql语句
需要的结果如下(没有对应的则补零):

id path cate_id cate2_id cate3_id cate4_id cate5_id
1 0,10,52,215,641, 0 10 52 215 641
2 0,32,167, 0 32 167 0 0
3 0,24,128,414, 0 24 128 414 0
4 0,23, 0 23 0 0 0

解决办法很多,现在只通过sql 语句来实现。使用的函数是 substring_index

函数简介:


按关键字截取字符串
substring_index(str,delim,count)
说明:substring_index(被截取字段,关键字,关键字出现的次数)


例:select substring_index(“www.baidu.com”,".",2) as abstract from my_content
结果:www.baidu


(注:如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束)


如果我要中间的的baidu怎么办?
很简单的,两个方向:
从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:
substring_index(substring_index(www.baidu.com,’.’,-2),’.’,1);

回到刚才问题,处理path字段,sql 如下:

SELECT
	`id`,
	`path`,
	substring_index(
	substring_index( path, ',',- ( LENGTH( path ) - LENGTH( REPLACE ( path, ',', '' ) ) + 1 ) ),
	',',
	1 
	) + 0 AS cate_id,
	substring_index( substring_index( path, ',',- ( LENGTH( path ) - LENGTH( REPLACE ( path, ',', '' ) ) ) ), ',', 1 ) AS cate2_id,
	substring_index(
	substring_index( path, ',',- ( LENGTH( path ) - LENGTH( REPLACE ( path, ',', '' ) ) - 1 ) ),
	',',
	1 
	) + 0 AS cate3_id,
	substring_index(
	substring_index( path, ',',- ( LENGTH( path ) - LENGTH( REPLACE ( path, ',', '' ) ) - 2 ) ),
	',',
	1 
	) + 0 AS cate4_id,
	substring_index(
	substring_index( path, ',',- ( LENGTH( path ) - LENGTH( REPLACE ( path, ',', '' ) ) - 3 ) ),
	',',
	1 
	) + 0 AS cate5_id 
FROM
	test

运行结果如图:
使用substring_index根据某分隔符分散处理mysql的字段数据

相关标签: mysql