mysql中截取函数substring_index的用法

SUBSTRING_INDEX函数按分隔符和计数截取字符串,正count从左截取,负count从右截取,常用于提取邮箱用户名、域名、IP段或路径文件名等结构化数据。

在MySQL中,SUBSTRING_INDEX 是一个非常实用的字符串函数,用于根据指定的分隔符和计数来截取字符串的一部分。它常用于处理含有分隔符(如逗号、点号、斜杠等)的字段,比如提取邮箱用户名、IP地址段或路径中的某部分。

基本语法

SUBSTRING_INDEX(str, delim, count)

  • str:原始字符串
  • delim:分隔符(可以是任意字符或字符串)
  • count:截取的段数。如果为正数,从左边开始数;如果为负数,从右边开始数

从左往右截取(正数count)

当 count 为正数时,函数返回从字符串最左侧开始,到第 count 个分隔符之前的所有部分。

例如,提取邮箱中的用户名:

SELECT SUBSTRING_INDEX('john.doe@example.com', '@', 1);

结果:john.doe

再比如,提取域名的第一部分:

SELECT SUBSTRING_INDEX('www.example.com', '.', 2);

结果:www.example

从右往左截取(负数count)

当 count 为负数时,函数从字符串右侧开始计数,返回从右边第 |count| 个分隔符之后的部分。

例如,提取邮箱的主域名:

SELECT SUBSTRING_INDEX('john.doe@example.com', '@', -1);

结果:example.com

提取IP地址的最后两段:

SELECT SUBSTRING_INDEX('192.168.1.100', '.', -2);

结果:1.100

实际应用场景

这个函数在数据清洗和解析结构化字符串时特别有用。

  • 拆分URL获取路径或域名
  • 解析日志中的请求参数
  • 提取文件路径中的文件名或目录
  • 分割逗号分隔的标签或类别字段

例如,从完整路径中提取文件名:

SELECT SUBSTRING_INDEX('/var/log/app.log', '/', -1);

结果:app.log

基本上就这些。只要掌握分隔符和正负 count 的方向逻辑,使用起来就很灵活。注意:如果 count 为 0,结果为空;如果分隔符不存在,返回整个字符串。不复杂但容易忽略细节。