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

如何在SQL多列中对字符串值执行LIKE模糊匹配查询?

多列LIKE OR匹配优化方案

通用跨数据库方案(拼接匹配法)

直接将需要匹配的多列用特殊分隔符拼接后做一次模糊匹配,不需要逐个写OR条件,注意做空值处理和加分隔符避免跨列误匹配:

-- 用COALESCE处理空值,| 作为分隔符避免跨列拼接误命中
SELECT * FROM table 
WHERE CONCAT_WS('|', COALESCE(col0,''), COALESCE(col1,''), COALESCE(col2,''), ...) LIKE '%value%';

注意:CONCAT_WS是大部分主流数据库(MySQL、PostgreSQL、SQL Server 2017+)都支持的拼接函数,更低版本的SQL Server可以用+或者CONCAT函数替代。

不同数据库专属更优写法

  • PostgreSQL 方案:利用数组遍历匹配,完全避免拼接误判问题
SELECT * FROM table 
WHERE EXISTS (
  SELECT 1 FROM unnest(ARRAY[col0,col1,col2,...]) AS t(col_val) 
  WHERE col_val LIKE '%value%'
);
  • MySQL 方案:利用JSON_SEARCH函数实现多值匹配
SELECT * FROM table 
WHERE JSON_SEARCH(JSON_ARRAY(col0,col1,col2,...), 'one', '%value%') IS NOT NULL;

大数量场景最优方案(全文索引)

如果需要高频执行这类多列模糊搜索,建议针对需要匹配的列建立全文索引,性能远高于普通LIKE查询:

-- 以MySQL为例,先建全文索引
ALTER TABLE table ADD FULLTEXT INDEX ft_idx_cols(col0,col1,col2,...);

-- 查询语句
SELECT * FROM table 
WHERE MATCH(col0,col1,col2,...) AGAINST('value' IN BOOLEAN MODE);

注意事项

  • 普通%value%格式的LIKE查询无法用到普通B树索引,数据量超过10万级时查询延迟会明显升高,优先选择全文索引方案。
  • 拼接列时必须加业务中不会出现的特殊字符作为分隔符,避免col0结尾和col1开头拼接后刚好命中搜索词的误匹配问题。
  • 可空列必须先做COALESCE处理为空字符串,否则空值参与拼接会导致整个拼接结果为NULL,出现漏匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:36:03