• 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中。

  • 相关阅读:
    从业务开发中学习和理解架构设计
    json-server|0编码实现REST API
    111. SAP UI5 FileUploader 控件实现本地文件上传,接收服务器端的响应时遇到跨域访问错误
    美容美发店会员管理系统开发_分享美容美发店做会员管理系统的好处
    计组笔记(1)——校验码、原补码乘除计算、浮点数计算
    NRK3301语音芯片在智能窗帘上的应用
    IP地址的分类,五分类编制CIDR以及子网的划分和子网掩码
    linux redis hash哈希 增删改查
    R之线性回归模型
    EasyExcel 注解fillForegroundColor
  • 原文地址:https://blog.csdn.net/weixin_44228413/article/details/136315762