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

MySQL存储过程查询特定字符串时FIND_IN_SET返回空行如何解决

问题原因

你调用存储过程只有第一个参数能返回结果的核心原因是**FIND_IN_SET函数的两个参数顺序写反了**。
MySQL的FIND_IN_SET语法为:
FIND_IN_SET(要查找的字符串, 逗号分隔的目标字符串列表)
它的作用是返回第一个参数在第二个参数的逗号分隔列表中的位置,不存在则返回0。
你当前写的FIND_IN_SET(Hobbies, var1)相当于把你传入的单个爱好值(比如Badminton)作为目标列表,去匹配Hobbies字段的完整值,只有Hobbies字段的内容和你传入的参数完全一致时才会命中,自然只有第一个参数能正常返回结果。


修复方案

调整FIND_IN_SET的参数顺序即可,修改后的存储过程代码如下:

DELIMITER &&
CREATE PROCEDURE Hobbies_Input (IN var1 VARCHAR(50))
BEGIN  
    SELECT * FROM sample_data WHERE FIND_IN_SET(var1, Hobbies);
END &&
DELIMITER ;

额外注意事项

如果调整参数顺序后仍存在匹配失败的情况,可以检查两个点:

  • sample_data表的Hobbies字段如果采用了大小写敏感的排序规则,需要保证传入参数的大小写和字段中存储的内容一致,或者在查询时统一转为大写/小写:
    SELECT * FROM sample_data WHERE FIND_IN_SET(LOWER(var1), LOWER(Hobbies));
    
  • 确认Hobbies字段中多个爱好之间的分隔符确实是英文逗号,没有多余的空格或者其他分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:18:02