mysql 中 substring_index的用法,小白都能看懂的。

本文详细介绍了MySQL中的SUBSTRING_INDEX函数,如何根据分隔符提取字符串中的特定部分,包括正数和负数计数的应用实例,以及如何利用`char_length`和`REPLACE`函数处理最后一个逗号前的内容。
摘要由CSDN通过智能技术生成

SUBSTRING_INDEX() 是 MySQL 中的一个字符串函数,用于根据指定的分隔符从字符串中提取子串。这个函数非常有用,特别是当你需要从字符串中按照某个分隔符获取特定的部分时。我经常会用到这个函数去处理一些字符。

SUBSTRING_INDEX(str, delim, count)


#str 是你要操作的原始字符串。
#delim 是你指定的分隔符。
#count 是一个数字,表示你想从字符串中提取的部分。

count 的值可以是正数或负数:

如果 count 是正数,函数将从字符串的开头开始,返回第 count 个分隔符之前的所有内容。
如果 count 是负数,函数将从字符串的结尾开始,返回倒数第 abs(count) 个分隔符之后的所有内容。
abs代表去绝对值,因为上述count是复数哈。

举个例子,假设我们有一个包含多个逗号分隔值的字符串 'a,b,c,d,e',并且我们想要提取第一个逗号之前的内容:

SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', 1);

结果将是 'a',因为第一个逗号之前的内容是 'a'。

这里count取得是1,分隔符为',' 所以就会取到左边数第一个逗号之前的内容。

我们向取最后一个逗号之后的内容,把1改为-1即可。

SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', -1);

结果将是 'E',因为右边数第一个逗号之后的内容是 'e'。

这里count取得是-1,分隔符为',' 所以就会取到右边数第一个逗号之后的内容。

那么这里帮助大家解决一个问题,就是如果我想取最后一个逗号之前的内容,或者,第一个逗号之后的内容应该怎么办呢。

我们可以使用char_length函数和replace函数结合,将','(分隔符)都替换为空,然后计算长度差,即可算出包含多少个,这样我们就可以在同一列,不同字符数到整数和倒数的哈。

以取最后一个逗号之前的内容为例,如下:

SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', 4);
SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', CHAR_LENGTH()-
CHAR_LENGTH(REPLACE('a,b,c,d,e',',','')));
#这里解释一下:
#后边这一长串CHAR_LENGTH('a,b,c,d,e')-CHAR_LENGTH(REPLACE('a,b,c,d,e',',',''))
的结果也会为4
#CHAR_LENGTH() 会获取到字符串的长度,使用REPLACE,将逗号替换为了空值,所以在外边套一层
CHAR_LENGTH,字符串长度会减去逗号的个数。
用原来的长度减去替换之后的,就获取到了逗号的总体个数。

#所以两个表达式的结果内容是一致的。都为'a,b,c,d'.

#这里之所以那么写,是因为我们在实际过程中,一个字段下遇到的分隔符数量是很有可能不一致的。

以此类推,我们只需要count位置上加一个-号,或者用后边的char_length()表达式减去前面的char_length()表达式也能得到-数,就可以获取到第一个分隔符号之后的内容啦。

这个函数在处理数据的时候非常好用,也适用于写于etl流程的sql中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值