小编典典

查询以查找子字符串的所有匹配行

sql

这是包含我的行条目的列 skills

C,C++
P,H,D
ASP,.net,C,C#,C++,R+
C++

我需要查找包含的所有条目C。因此,我使用来格式化查询Skills LIKE ('%'+@Skill+'%'),这为我提供了所有条目,包括C++当我只想C单独获得结果时。

从上面的示例中搜索,我只能获取C,C++ASP, .net, C, C#, C++, R+行。我一定不能C++-结果集中的最后一行。

我的要求是我只需要C在搜索时才需要,C而不是C++。如何格式化这样的查询?

我正在使用存储过程来执行所有查询。


阅读 177

收藏
2021-04-22

共1个答案

小编典典

您可以根据这些条件进行过滤

  1. 如果搜索技能是列中的第一技能 Skills LIKE @Skill +',%'

  2. 如果搜索技巧在中间 Skills LIKE '%,'+ @Skill+',%'

  3. 如果搜索技巧处于末尾 Skills LIKE '%,' + @Skill

  4. 如果搜索技能是唯一技能 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关于如何改善设计的答案

2021-04-22