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

SQL如何实现列中模式与字符串的反向匹配查询?

解决方案思路与实现

你的需求核心是按优先级匹配通配符规则,SQL里可以通过LIKE运算符配合排序来实现,步骤如下:

  1. 转换通配符:SQL标准中LIKE用%表示任意长度字符(对应你的*),所以先把表中的Filter字段里的*替换成%。
  2. 匹配筛选:用目标字符串去匹配转换后的规则。
  3. 优先级排序:给不同规则设置优先级,确保最精确的规则(比如foo*)排在最前面,最后取第一个匹配结果。

具体SQL实现(以MySQL为例)

假设要匹配的目标字符串是'fooString',执行以下查询会返回ID=1:

SELECT ID
FROM FILTER_TABLE
WHERE 'fooString' LIKE REPLACE(Filter, '*', '%')
ORDER BY 
  CASE Filter
    WHEN 'foo*' THEN 1
    WHEN '*bar' THEN 2
    WHEN '*' THEN 3
  END
LIMIT 1;

适配不同数据库

  • SQL Server 替换LIMIT 1为TOP 1:
SELECT TOP 1 ID
FROM FILTER_TABLE
WHERE 'fooString' LIKE REPLACE(Filter, '*', '%')
ORDER BY 
  CASE Filter
    WHEN 'foo*' THEN 1
    WHEN '*bar' THEN 2
    WHEN '*' THEN 3
  END;
  • PostgreSQL 用法和MySQL一致,用LIMIT 1即可。

逻辑说明

  • 当目标字符串是'xyzbar'时,会匹配*bar和*两条规则,但排序后*bar优先级更高(排序值2),所以返回ID=2。
  • 当目标字符串不匹配前两条规则时,只会匹配*,返回ID=3。
  • 如果后续要添加更多规则,只需要在CASE语句中增加对应的规则和优先级数值即可(数值越小优先级越高)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:14