mysql根据指定字符拆分字段内容substring_index

sql字段拆分场景有多种,常用的是拆分1次,这里我遇到的是需要拆分不定次数的场景。

场景①:根据指定字符,执行1次字段拆分

-- 截取第1个“,”符号左边的数据(从左截取)
select substring_index(name,",",1) name from tablename
select substring_index("abcd","b",1)		//结果为:a

-- 截取从右往左,第1个“,”符号,右边的数据(从右截取)
select substring_index(name,",",-1) name from tablename
select substring_index("abcd","b",-1)		//结果为:cd

场景②:根据一个或多个指定字符,自动匹配字段中指定字符出现的次数,进行N次自动拆分。

如,此处需要拆分的字段内容是:

变速器,顿挫 制动系统,刹车泵故障 车身附件及电器,传感器故障

此处是既有逗号 “,” 分隔,又有空格 “ ” 分隔;

因为mysql数据库中字符串的拆分没有其他数据库那么方便(其他数据库直接有拆分函数),所以需要借助mysql库中的mysql.help_topic表来辅助实现,那么根据实际场景拆分sql是这样的:

SELECT
	complaint_time,
	complaint_brand,
	complaint_series,
	substring_index( NAME, ",",- 1 ) NAME 
FROM
	(
SELECT DISTINCT
	date( complaint_time ) complaint_time,
	complaint_brand,
	complaint_series,
	substring_index( substring_index( a.question_type, ' ', b.help_topic_id + 1 ), ' ',- 1 ) NAME 
FROM
	app_spiderdata_auto_complaint a
	JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.question_type ) - length( REPLACE ( a.question_type, ' ', '' ) ) + 1 ) 
WHERE
	complaint_id = '12365' 
	) c

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值