记录 substing() 和 substring_index()函数用法
统计每种性别的人数
https://www.nowcoder.com/practice/f04189f92f8d4f6fa0f383d413af7cb8
select case SUBSTRING_INDEX (profile, ',', -1) when 'female' then 'female' else 'male' end as gender, count(*) as `number` from user_submit group by gender
在MySQL中,SUBSTRING()
和 SUBSTRING_INDEX()
是两个用于处理字符串的函数,它们允许你从字符串中提取子字符串。下面是对这两个函数以及相关的 SUBSTR()
函数的详细介绍:
1. SUBSTRING()
和 SUBSTR()
SUBSTRING()
和 SUBSTR()
实际上是相同的函数,只是名称不同。它们用于从一个字符串中提取子字符串。
语法:
SUBSTRING(string, pos, len)
SUBSTR(string, pos, len)
string
:要从中提取子字符串的原始字符串。pos
:开始提取的位置(基于1的索引)。如果是负数,则从字符串末尾开始计算位置。len
:要提取的字符数。如果省略,则提取从pos
开始到字符串末尾的所有字符。
示例:
SELECT SUBSTRING('Hello World', 1, 5); -- 返回 'Hello' SELECT SUBSTR('Hello World', 7, 5); -- 返回 'World' SELECT SUBSTRING('Hello World', -6, 5); -- 返回 'World'(从末尾开始计算)
2. SUBSTRING_INDEX()
SUBSTRING_INDEX()
函数返回字符串 string
从起始位置到第 count
次出现分隔符 delimiter
之前的子字符串。它通常用于基于分隔符提取字符串的特定部分。
语法:
SUBSTRING_INDEX(string, delimiter, count)
string
:要分割的原始字符串。delimiter
:用作分隔符的字符串。count
:一个整数,指定分隔符出现的次数。如果是正数,则返回该次数之前的所有子字符串;如果是负数,则返回该次数之后的所有子字符串(但不包括该次数本身的分隔符及其后的内容)。
示例:
SELECT SUBSTRING_INDEX('a,b,c,d', ',', 2); -- 返回 'a,b' SELECT SUBSTRING_INDEX('a,b,c,d', ',', -2); -- 返回 'c,d'(注意这里是从后往前数第二次出现的逗号) SELECT SUBSTRING_INDEX('a,b,c,d', ',', 3); -- 返回 'a,b,c' SELECT SUBSTRING_INDEX('a,b,c,d', ',', -1); -- 返回 'd'(实际上是获取最后一个分隔符之后的内容)
注意:在最后一个示例中,虽然看起来像是获取了最后一个元素,但实际上 SUBSTRING_INDEX()
是在寻找倒数第一个分隔符之前的内容(在这个特定情况下,由于没有分隔符在其后,它返回了分隔符之后的所有内容)。如果你想要明确地获取最后一个逗号之后的内容,通常可以结合使用 SUBSTRING_INDEX()
和其他字符串函数,或者简单地使用 SUBSTRING()
和 LOCATE()
函数来找到最后一个逗号的位置。
总结
- 使用
SUBSTRING()
(或SUBSTR()
)来基于位置和长度提取子字符串。 - 使用
SUBSTRING_INDEX()
来基于分隔符和出现的次数提取子字符串。
这些函数在处理字符串数据时非常有用,尤其是在需要从复杂字符串中提取特定信息时。
SQL练练练 文章被收录于专栏
记录自己sql的每一步提升!