类别字段ctgr中的值是连在一起的,入库时需要分割开来,方便查询。数据如下所示:
在这里插入图片描述

使用 MySQL 提供的字符串分割函数 SUBSTRING_INDEX 函数可以方便的实现需求。

函数语法:

SUBSTRING_INDEX(str,delim,count)
str: 待分割字符串
delim:分割符
count: 取到第几个分割后的子字符串

该函数返回分隔符delim的出现次数之前的字符串str的子字符串。
如果count为正数,则返回最后分隔符左边的所有内容(从左边计数)。
如果count为负,则返回最后分隔符右侧的所有内容(从右开始计数)。
SUBSTRING INDEX()在搜索delim时执行区分大小写的匹配。

SQL示例语句(参照官网)如下:

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -1);
        -> 'com'

针对本文的需求:

SUBSTRING_INDEX(ctgr, '-',  1)    -- 获取一级目录
SUBSTRING_INDEX(SUBSTRING_INDEX(ctgr,'-',2), '-', -1)   -- 获取二级目录(先获取前面两级,然后截取末位的子串)
SUBSTRING_INDEX(ctgr, '-', -1)    -- 获取三级目录

总的查询语句如下:

SELECT ctgr, SUBSTRING_INDEX(ctgr,'-', 1) topLevel, 
       SUBSTRING_INDEX(SUBSTRING_INDEX(ctgr,'-',2),'-',-1) secondLevel,
       SUBSTRING_INDEX(ctgr,'-', -1) thirdLevel 
from person ;

查询结果如下:
在这里插入图片描述

最后更新到对应的字段:

UPDATE person SET topCtgr=SUBSTRING_INDEX(ctgr,'-', 1);
UPDATE person SET secCtgr=SUBSTRING_INDEX(SUBSTRING_INDEX(ctgr,'-',2),'-',-1);
UPDATE person SET thdCtgr=SUBSTRING_INDEX(ctgr,'-', -1);

参考:
MySQL 8.0 Reference Manual - 12.5 String Functions

截取的字符串为15,151,152,16’,可以看作是ip吧(虽然这里指的不是iP), 然后要截取每个逗号之前那部分 以下的意思是:在字符串中以逗号为索引,获取不同索引位的字符 结果如下: SELECT SUBSTRING_INDEX('15,151,152,16',',',1); ==>得到结果为: 15 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('15,151,152,16',',',2),',',-1);==>得到结果为: 151 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('15,151,152,16',',', SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num mysql.help_topic 在mysql数据库中实现字符串的分割,由于没有现成的split函数,只能自己实现了。例如:update `edw_video` set company = Split(keyword,1,length(Split_INDEX(keyword,",",1)))名称:SPLIT_SUB_STR1(取得split字符串的第一段)参数:str 要split的目标字符串 (输入格式为‘11,2,3,4,5,... 实现的sql SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num FROM mysql.help_topic WHERE help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,. SELECT substring_index(substring_index(‘张三,李四,王五,赵六,杨七’,’,’,help_topic_id + 1),’,’ ,- 1) AS Id mysql.help_topic WHERE help_topic_id < (length(‘张三,李四,王五,赵六,杨七’) - length(REPLACE (‘张三,李四... 前言:本人遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index(‘www.sqlstudy.com.cn’, ‘.’, -2) 强烈推荐该方法获取含有特定字符的数据。   substring_index(input,split,index):input为要截取的字符,split为分隔符Index为要截取第index分隔符左(index为正)或右(index为负)的字符串。   拿个人的一个字符串举例:’Provider=”RiskManagement” finalScor --按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。CREATE function Get_StrArrayLength(@str varchar(1024), --要分割的字符串@split varchar(10) --分隔符号)returns intasbegindeclare @location int...