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

如何修复SQL语法错误,实现支持空格的跨列搜索功能?

修复带空格搜索的SQL语法错误方案

问题出在哪

你原来的SQL里keywords[&#32]+location_keywords是错误写法:

  • SQL里不能用[&#32]表示空格,直接写空格就行
  • 字符串拼接不能这么用+,得用对应数据库的拼接方法

分数据库的正确写法

MySQL/MariaDB 版本

用CONCAT函数拼接两列,同时兼顾单个关键词和组合词的匹配:

SELECT * 
FROM `partners` 
WHERE 
  -- 匹配单个关键词(Townsville或marketing)
  location_keywords LIKE '%Townsville%' 
  OR location_keywords LIKE '%marketing%'
  OR keywords LIKE '%Townsville%' 
  OR keywords LIKE '%marketing%'
  -- 匹配"Townsville marketing"(location在前,keywords在后)
  OR CONCAT(location_keywords, ' ', keywords) LIKE '%Townsville marketing%'
  -- 匹配"marketing Townsville"(keywords在前,location在后)
  OR CONCAT(keywords, ' ', location_keywords) LIKE '%Townsville marketing%';

如果是动态用户输入,先把搜索词按空格拆成单个词,再用参数化查询(避免SQL注入):

-- 假设?是参数占位符,依次传入拆分后的单个词、完整搜索词
SELECT * 
FROM `partners` 
WHERE 
  location_keywords LIKE CONCAT('%', ?, '%') 
  OR location_keywords LIKE CONCAT('%', ?, '%')
  OR keywords LIKE CONCAT('%', ?, '%') 
  OR keywords LIKE CONCAT('%', ?, '%')
  OR CONCAT(location_keywords, ' ', keywords) LIKE CONCAT('%', ?, '%')
  OR CONCAT(keywords, ' ', location_keywords) LIKE CONCAT('%', ?, '%');

PostgreSQL 版本

PostgreSQL用||做字符串拼接:

SELECT * 
FROM partners 
WHERE 
  location_keywords LIKE '%Townsville%' 
  OR location_keywords LIKE '%marketing%'
  OR keywords LIKE '%Townsville%' 
  OR keywords LIKE '%marketing%'
  OR (location_keywords || ' ' || keywords) LIKE '%Townsville marketing%'
  OR (keywords || ' ' || location_keywords) LIKE '%Townsville marketing%';

SQL Server 版本

SQL Server可用+拼接,但要处理NULL值(用ISNULL避免拼接结果为NULL):

SELECT * 
FROM partners 
WHERE 
  location_keywords LIKE '%Townsville%' 
  OR location_keywords LIKE '%marketing%'
  OR keywords LIKE '%Townsville%' 
  OR keywords LIKE '%marketing%'
  OR (ISNULL(location_keywords, '') + ' ' + ISNULL(keywords, '')) LIKE '%Townsville marketing%'
  OR (ISNULL(keywords, '') + ' ' + ISNULL(location_keywords, '')) LIKE '%Townsville marketing%';

额外提醒

  • 绝对不要直接把用户输入拼进SQL,用参数化查询防注入
  • 如果数据量很大,LIKE '%xxx%'会很慢,建议用全文索引优化搜索性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:15:35