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
相关产品推荐
相关产品推荐

