Sql Server在另一个字符串中查找部分字符串

时间:2012-09-12 08:44:51

标签: sql sql-server

我有一张桌子

studentId        Classes
1               Auto CAD,Electronics
2               Instrumentation,Chemical,IT,English
3               Computer,Math,Hindi
4               Physics,Accountancy
5               Bengali,Geography

现在我想使用单个字符串“Instrumentation,Geography,Physics”进行搜索

它将显示以下内容

studentId        Classes
2               Instrumentation,Chemical,IT,English
4               Physics,Accountancy
5               Bengali,Geography

因为studentid 2包含Instrumentation,studentid 4包含Physics,studentid 5包含Geography

如何使用SELECT声明执行此操作?不像'%Instrumentation%'这样的类 或者像'%Geography%'或像'%Physics%'这样的类,因为我想使用单个变量来串联“Instrumentation,Geography,Physics”或用逗号分隔的字符串的任意组合。

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT * 
FROM    your_Table
WHERE   ','+Classes+',' like '%,Instrumentation,%'
OR      ','+Classes+',' like '%,Geography,%'
OR      ','+Classes+',' like '%,Physics,%'

我在列和搜索条件中添加了一个逗号,以便它只返回以逗号结尾的字符串

答案 1 :(得分:2)

你可以使用T-SQL Like语句,但理想情况下你会规范化你的数据库,因为你真的不应该在同一个字段中有多个值 - 正是出于这个原因。

使用Like的问题是它可以匹配不需要的术语 - 对于%physics%也会匹配'astro-physics'课程 - 这可能不是你想要的。

在Joe的例子中 - 添加逗号会起作用(在这种情况下)但这段代码很脆弱(真的是一个黑客) - 如果机会仍然存在,我的建议是normalise数据库正确。

答案 2 :(得分:1)

您可以将搜索字符串解压缩到表变量并在exists子句中使用。

declare @S varchar(500)
set @S = 'Instrumentation,Geography,Physics'

declare @T table(Class varchar(50))

while len(@S) > 0
begin
  insert into @T values(left(@S, charindex(',', @S+',')-1))
  set @S = stuff(@S, 1, charindex(',', @S+','), '')
end

select *
from YourTable as YT
where exists (
               select *
               from @T as T
               where ','+YT.Classes+',' like '%,'+T.Class+',%'
             )

SQL Fiddle