这是包含我的行条目的列 skills
skills
C,C++ P,H,D ASP,.net,C,C#,C++,R+ C++
我需要查找包含的所有条目C。因此,我使用来格式化查询Skills LIKE ('%'+@Skill+'%'),这为我提供了所有条目,包括C++当我只想C单独获得结果时。
C
Skills LIKE ('%'+@Skill+'%')
C++
从上面的示例中搜索,我只能获取C,C++和ASP, .net, C, C#, C++, R+行。我一定不能C++-结果集中的最后一行。
C,C++
ASP, .net, C, C#, C++, R+
我的要求是我只需要C在搜索时才需要,C而不是C++。如何格式化这样的查询?
我正在使用存储过程来执行所有查询。
您可以根据这些条件进行过滤
如果搜索技能是列中的第一技能 Skills LIKE @Skill +',%'
Skills LIKE @Skill +',%'
如果搜索技巧在中间 Skills LIKE '%,'+ @Skill+',%'
Skills LIKE '%,'+ @Skill+',%'
如果搜索技巧处于末尾 Skills LIKE '%,' + @Skill
Skills LIKE '%,' + @Skill
如果搜索技能是唯一技能 Skills = @Skill
Skills = @Skill
询问
SELECT ... WHERE Skills LIKE '%,'+ @Skill+',%' OR Skills LIKE @Skill +',%' OR Skills LIKE '%,' + @Skill OR Skills = @Skill
编辑
另一个较短的查询可以是
SELECT ... WHERE ',' + Skills + ',' LIKE '%,'+ @Skill+',%'
注意: 使用这种设计和查询可能会遇到性能问题。如果可能,请查看创建技能表以容纳用户的所有技能。请参阅Zohar Peled关于如何改善设计的答案