类别字段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...