1 需求
类别字段ctgr中的值是连在一起的,入库时需要分割开来,方便查询。数据如下所示:
2 方法
使用 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);