开发者

MySQL 字符串截取函数及用法详解

目录
  • mysql 字符串截取函数详解
  • RIGHT(str, length):从右侧截取指定长度的字符
  • SUBSTRING(str, pos) 或 SUBSTRING(str, pos, len):从指定位置开始截取
  • SUBSTRING_INDEX(str, delim, count):根据分隔符截取字符串
  • 多字节字符处理
  • 实际应用场景
    • 场景 1:提取邮箱的域名
    • 场景 2:解析 URL 中的路径
  • 总结

    MySQL 字符串截取函数详解

    在 MySQL 中,字符串截取是常见的操作,主要用于从字符串中提取特定部分。MySQL 提供了多种函数来实现这一功能,包括 LEFT()RIGHT()SUBSTRING()MID()SUBSTR()SUBSTRING_INDEX() 等。本文将详细介绍这些函数的用法,并通过示例进行说明。

    LEFT(str, length):从左侧截取指定长度的字符

    功能:从字符串 str 的左侧开始,截取 length 个字符。

    语法

    LEFT(str, length)

    示例

    SELECT LEFT('sqlstudy.com', 3);

    结果

    +-------------------------+

    | LEFT('sqlstudy.com', 3) |

    +-------------------------+

    | sql |

    +-------------------------+

    解释:从 'sqlstudy.com' 的左侧开始,截取 3 个字符,结果为 'sql'

    RIGHT(str, length):从右侧截取指定长度的字符

    功能:从字符串 str 的右侧开始,截取 length 个字符。

    语法

    RIGHT(str, length)

    示例

    SELECT RIGHT('sqlstudy.com', 3);

    结果

    +--------------------------+

    | RIGHT('sqlstudy.com', 3) |

    +--------------------------+

    | com |

    +--------------------------+

    解释:从 'sqlstudy.com' 的右侧开始,截取 3 个字符,结果为 'com'

    SUBSTRING(str, pos) 或 SUBSTRING(str, pos, len):从指定位置开始截取

    功能:从字符串 str 的第 pos 个字符开始,截取 len 个字符。pos 可以是正数或负数,正数表示从左侧开始,负数表示从右侧开始。

    语法

    SUBSTRING(str, pos)
    SUBSTRING(str, pos, len)

    示例

    -- 从第 4 个字符开始,直到结束
    SELECT SUBSTRING('sqlstudy.com', 4);
    -- 从第 4 个字符开始,截取 2 个字符
    SELECT SUBSTRING('sqlstudy.com', 4, 2);
    -- 从倒数第 4 个字符开始,直到结束
    SELECT SUBSTRING('sqlstudy.com', -4);
    -- 从倒数第 4 个字符开始,截取 2 个字符
    SELECT SUBSTRING('sqlstudy.com', -4, 2);

    结果

    +------------------------------+

    | SUBSTRING('sqlstudy.com', 4) |

    +------------------------------+

    | study.com |

    +------------------------------+

    +---------------------------------+

    | SUBSTRING('sqlstudy.com', 4, 2) |

    +---------------------------------+

    | st |

    +---------------------------------+

    +-------------------------------+

    | SUBSTRING('sqlstudy.com', -4) |

    +-------------------------------+

    | .com |

    +-------------------------------+

    +----------------------------------+

    | SUBSTRING('shttp://www.devze.comqlstudy.com', -4, 2) |

    +-------------http://www.devze.com---------------------+

    | .c |

    +----------------------------------+

    解释

    • SUBSTRING('sqlstudy.com', 4):从第 4 个字符开始,直到字符串结束,结果为 android'study.com'
    • SUBSTRING('sqlstudy.com', 4, 2):从第 4 个字符开始,截取 2 个字符,结果为 'st'
    • SUBSTRING('sqlstudy.com', -4):从倒数第 4 个字符开始,直到字符串结束,结果为 '.com'
    • SUBSTRING('sqlstudy.com', -4, 2):从倒数第 4 个字符开始,截取 2 个字符,结果为 '.c'

    注意

    len 必须为非负整数。若省略 len,则默认截取到字符串末尾。

    pos 超出字符串长度或为 0,返回空字符串。例如:

    SELECT SUBSTRING('abc', 0, 1);   -- 结果:空字符串
    SELECT SUBSTRING('abc', 5, 1);   -- 结果:空字符串

    SUBSTRING_INDEX(str, delim, count):根据分隔符截取字符串

    功能:根据分隔符 delim,从字符串 str 中截取出第 count 次出现的分隔符前或后的子字符串。count 为正数时,从左侧开始计数;为负数时,从右侧开始计数。

    语法

    SUBSTRING_INDEX(str, delim, count)

    示例

    -- 截取第二个 '.' 之前的所有字符
    SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2);
    -- 截取倒数第二个 '.' 之后的所有字符
    SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2);
    -- 如果分隔符不存在,返回整个字符串
    SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1);

    结果

    +------------------------------------------------+

    | SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2) |

    +------------------------------------------------+

    | www.sqlstudy |

    +------------------------------------------------+

    +-------------------------------------------------+

    | SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2) |

    +-------------------------------------------------+

    | com.cn |

    +-------------------------------------------------+

    +---------------------------------------------------+

    | SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1) |

    +---------------------------------------------------+

    | www.sqlstudy.com.cn |

    +---------------------------------------------------+

    解释

    • SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2):返回第 2 次出现的 . 之前的所有字符,结果为 'www.sqlstudy'
    • SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2):返回倒数第 2 次出现的 . 之后的所有字符,结果为 'com.cn'
    • SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1):由于 .coc 不存在于字符串中,返回整个字符串 'www.sqlstudy.com.cn'

    注意

    count编程 超过分隔符实际出现的次数,返回整个字符串。例如:

    SELECT SUBSTRING_INDEX('a.b.c.d', '.', 5);  -- 结果:'a.b.c.d'

    MID(str, pos, len) 或 SUBSTR(str, pos, len):与 SUBSTRING 等价

    功能:与 SUBSTRING 函数功能相同,用于从指定位置开始截取指定长度的子字符串。

    语法

    MID(str, pos, len)
    SUBSTR(str, pos, len)

    示例

    -- 从第 4 个字符开始,截取 2 个字符
    SELECT MID('sqlstudy.com', 4, 2);
    -- 从倒数第 4 个字符开始,截取 2 个字符
    SELECT SUBSTR('sqlstudy.com', -4, 2);

    结果

    +----------------------------------+

    | MID('sqlstudy.com', 4, 2) |

    +----------------------------------+

    | st |

    +----------------------------------+

    +-----------------------------------+

    | SUBSTR('sqlstudy.com', -4, 2) |

    +-----------------------------------+

    | .c |

    +-----------------------------------+

    解释

    • MID('sqlstudy.com', 4, 2)SUBSTRING('sqlstudy.com', 4, 2) 结果相同,均为 'st'
    • SUBSTR('sqlstudy.com', -4, 2)SUBSTRING('sqlstudy.com', -4, 2) 结果相同,均为 '.c'

    多字节字符处理

    MySQL 的字符串截取函数默认按字符(而非字节)处理,适用于多字节字符集(如 UTF-8)。例如:

    SELECT LEFT('中文测试', 2);  -- 结果:'中文'
    SELECT SUBSTRING('数据库', 2, 2);  -- 结果:'据库'

    实际应用场景

    场景 php1:提取邮箱的域名

    SELECT 
      email,
      SUBSTRING_INDEX(email, '@', -1) AS domain
    FROM users;

    结果

    +-------------------+-------------+

    | email | domain |

    +-------------------+-------------+

    | user@example.com | example.com |

    +-------------------+-------------+

    场景 2:解析 URL 中的路径

    SELECT 
      SUBSTRING_INDEX(SUBSTRING_INDEX(url, '//', -1), '/', 1) AS host
    FROM website;

    输入'https://www.sqlstudy.com/path'

    输出'www.sqlstudy.com'

    总结

    函数功能概要核心区别
    LEFT() / RIGHT()从左右侧截取固定长度方向固定,长度明确
    SUBSTRING()灵活指定起始位置和长度支持正负位置,功能最全面
    SUBSTRING_INDEX()基于分隔符截取适合处理结构化字符串(如路径)
    MID() / SUBSTR()SUBSTRING 功能相同语法别名,可互换使用

    掌握这些函数,可以高效处理字符串截取需求,提升数据处理的灵活性。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新数据库

    数据库排行榜