You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何通过多分隔符提取列中匹配指定值的分段内容

MySQL匹配指定值并返回对应分段的实现

假设你的表叫your_table,存目标字符串的列是target_column,要找的关键字是@keyword(直接换成具体值或者用变量都行)。

方法1:用REGEXP_SUBSTR(适合MySQL 8.0及以上)

直接用正则表达式匹配包含关键字的完整分段,一步到位:

SELECT 
  REGEXP_SUBSTR(target_column, '[^|]*\\b' @keyword '\\b[^|]*') AS matched_segment
FROM your_table
WHERE target_column REGEXP '\\b' @keyword '\\b';

逻辑说明:

  • [^|]*:匹配所有不是|的字符,刚好能框住每个以|分隔的分段
  • \\b:单词边界,防止把123误匹配成1234这种部分重叠的情况
  • 先通过WHERE筛出包含关键字的行,再用REGEXP_SUBSTR把对应的分段提取出来

方法2:兼容老版本MySQL(低于8.0)

如果你的MySQL版本太老,没有REGEXP_SUBSTR函数,就用字符串截取的方式实现:

SELECT 
  SUBSTRING_INDEX(
    SUBSTRING_INDEX(target_column, '|', 
      LOCATE(CONCAT('|', @keyword), CONCAT('|', target_column)) + 1
    ), '|', -1
  ) AS matched_segment
FROM your_table
WHERE target_column LIKE CONCAT('%', @keyword, '%');

逻辑说明:

  • 先给字符串首尾加个|,这样不管关键字在第一个还是最后一个分段,处理逻辑都一致
  • 定位到关键字所在分段的位置,通过两次SUBSTRING_INDEX把目标分段截出来

实际测试验证

拿你提供的列值举例:

761696495 - 689552180|723146573 - 684706476|295453556 - 656883782

不管查询684706476还是723146573,两种方法都会返回:

723146573 - 684706476

内容的提问来源于stack exchange,提问作者Shane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:43:24