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


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

    1. SUBSTRING_INDEX(str, delim, count)
    2. #str 是你要操作的原始字符串。
    3. #delim 是你指定的分隔符。
    4. #count 是一个数字,表示你想从字符串中提取的部分。
    5. count 的值可以是正数或负数:
    6. 如果 count 是正数,函数将从字符串的开头开始,返回第 count 个分隔符之前的所有内容。
    7. 如果 count 是负数,函数将从字符串的结尾开始,返回倒数第 abs(count) 个分隔符之后的所有内容。
    8. abs代表去绝对值,因为上述count是复数哈。

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

    1. SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', 1);
    2. 结果将是 'a',因为第一个逗号之前的内容是 'a'
    3. 这里count取得是1,分隔符为',' 所以就会取到左边数第一个逗号之前的内容。

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

    1. SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', -1);
    2. 结果将是 'E',因为右边数第一个逗号之后的内容是 'e'
    3. 这里count取得是-1,分隔符为',' 所以就会取到右边数第一个逗号之后的内容。

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

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

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

    1. SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', 4);
    2. SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', CHAR_LENGTH()-
    3. CHAR_LENGTH(REPLACE('a,b,c,d,e',',','')));
    4. #这里解释一下:
    5. #后边这一长串CHAR_LENGTH('a,b,c,d,e')-CHAR_LENGTH(REPLACE('a,b,c,d,e',',',''))
    6. 的结果也会为4
    7. #CHAR_LENGTH() 会获取到字符串的长度,使用REPLACE,将逗号替换为了空值,所以在外边套一层
    8. CHAR_LENGTH,字符串长度会减去逗号的个数。
    9. 用原来的长度减去替换之后的,就获取到了逗号的总体个数。
    10. #所以两个表达式的结果内容是一致的。都为'a,b,c,d'.
    11. #这里之所以那么写,是因为我们在实际过程中,一个字段下遇到的分隔符数量是很有可能不一致的。

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

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

  • 相关阅读:
    [记忆化dfs]leetcode2400:恰好移动 k 步到达某一位置的方法数目(medium)
    经济型EtherCAT运动控制器(九):示波器使用
    深入解析大数据分析:技术挑战、应用场景与未来趋势
    MySQL事务并发问题和MVCC机制
    [附源码]计算机毕业设计springboot基于Java酒店管理系统
    TiDB 监控框架概述
    Python Pandas Series转换为DataFrame
    算法刷题日志——贪心
    基于PHP+MySQL的养老院管理系统
    【Rust日报】2022-11-08 bless.rs: 带你走入 Rust 生态
  • 原文地址:https://blog.csdn.net/weixin_44228413/article/details/136315762