记录 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的每一步提升!

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务