MySQL 按指定分隔符截取字符串函数substring_index

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);

参考:
MySQL 8.0 Reference Manual - 12.5 String Functions

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值