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