如何将词语列表传入SQL LIKE操作符实现多关键词匹配查询
多关键词LIKE匹配实现方法
要实现匹配列表内任意词语就返回记录的需求,核心逻辑是用OR连接多个独立的LIKE判断条件,只要任意一个条件命中就会返回对应行。
1. 固定关键词的原生SQL写法
直接把每个关键词单独作为LIKE的匹配条件,用OR串联即可:
SELECT customer_comments FROM table WHERE customer_comments LIKE '%air con%' OR customer_comments LIKE '%no cold air%' OR customer_comments LIKE '%hot air%' OR customer_comments LIKE '%blowing hot air%'
注意:不需要特意调整关键词顺序,OR逻辑只要任意条件满足就会命中,短词不会覆盖长词的匹配结果。
2. Python场景下动态传入列表的安全写法
如果需要从my_list动态生成语句,不要直接手动拼接用户可控的关键词到SQL语句里,会存在SQL注入风险,要使用数据库驱动的参数化查询能力,自动生成条件片段:
my_list = ['air con', 'no cold air', 'hot air', 'blowing hot air'] # 生成OR连接的LIKE条件片段,注意根据你用的数据库驱动替换占位符: # pymysql/psycopg2(PostgreSQL)用%s,SQLite用? like_conditions = " OR ".join(["customer_comments LIKE %s" for _ in my_list]) # 给每个关键词拼接前后的%通配符,作为查询参数 query_params = [f"%{word}%" for word in my_list] # 拼接得到最终可执行的SQL final_sql = f"SELECT customer_comments FROM table WHERE {like_conditions}" # 执行时传入参数即可,以pymysql为例: # cursor.execute(final_sql, query_params)
可选简化方案(部分数据库支持)
如果使用的数据库支持正则函数,也可以用正则匹配简化语句,比如MySQL环境下可以写成:
SELECT customer_comments FROM table WHERE customer_comments REGEXP 'air con|no cold air|hot air|blowing hot air'
这种写法需要注意提前转义关键词里的正则特殊字符(比如.、*等),兼容性不如多个LIKE条件的方案,适合关键词确定无特殊字符的场景使用。
内容的提问来源于stack exchange,提问作者Jayashree Sridhar
相关产品推荐
相关产品推荐

