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

如何使用%通配符实现字符串匹配 提取姓名部分匹配的表记录

问题描述

现有表A存储发件、收件人姓名信息,需要筛选出发件人和收件人姓名存在部分匹配(不需要完全一致)的记录,例如样例中id为ABC、DEF的条目,要求使用%通配符实现字符串模糊匹配。

样例表A数据

id发件人全名收件人名收件人姓氏
ABCmike smith brownmikesmith
DEFkate josefin bakerkatebaker williams
GHIkim jonesnathanwilson
实现方法

%是SQLLIKE语法里的通配符,能匹配0到任意长度的任意字符,把它拼在要匹配的内容前后,就能判断目标字符串里是否存在对应内容。

要筛出符合要求的记录,核心是满足两个条件:一是发件人全名里包含收件人名,二是发件人全名和收件人姓氏有重合内容。直接用下面的语句即可:

SELECT * FROM 表A
WHERE
  发件人全名 LIKE CONCAT('%', 收件人名, '%')
  AND (
    发件人全名 LIKE CONCAT('%', 收件人姓氏, '%')
    OR 收件人姓氏 LIKE CONCAT('%', SUBSTRING_INDEX(发件人全名, ' ', -1), '%')
  );

效果验证

  • id=ABC:发件人全名里有收件人名mike,也有收件人姓氏smith,命中规则被返回
  • id=DEF:发件人全名里有收件人名kate,发件人末尾的baker属于收件人双姓baker williams的一部分,命中规则被返回
  • id=GHI:发件人全名里既没有收件人名nathan,和收件人姓氏wilson也没有重合内容,被过滤

如果业务场景不需要处理多段姓氏的双向匹配,只需要判断发件人全名是否包含收件人填写的完整姓氏,可以直接把条件简化:

SELECT * FROM 表A
WHERE 发件人全名 LIKE CONCAT('%', 收件人名, '%') 
  AND 发件人全名 LIKE CONCAT('%', 收件人姓氏, '%');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:51:26