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

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

比如数据库中 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的字段数据_第1张图片

你可能感兴趣的:(mysql)