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

Sou*_*age 3 sql t-sql sql-server

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

C,C++
P,H,D
ASP,.net,C,C#,C++,R+
C++
Run Code Online (Sandbox Code Playgroud)

我需要找到包含的所有条目C.所以我通过使用格式化了一个查询Skills LIKE ('%'+@Skill+'%'),这给了我所有条目,包括C++我只想获得C单独的结果.

从上面的例子中搜索,我只能得到C,C++ASP, .net, C, C#, C++, R+行.我不能得到C++- 结果集中的最后一行.

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

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

ugh*_*hai 6

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

  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
Run Code Online (Sandbox Code Playgroud)

编辑

另一个较短的查询可以

SELECT ...
WHERE ',' + Skills + ',' LIKE '%,'+ @Skill+',%'
Run Code Online (Sandbox Code Playgroud)

注意::您可能会遇到此类设计和查询的性能问题.如果可能的话,请考虑创建一个技能表来保存用户的所有技能.请参阅Zohar Peled关于如何改进设计的答案