2

我有一张桌子

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”或用逗号分隔的字符串的任何组合。

4

3 回答 3

2

尝试这个:

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

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

于 2012-09-12T08:46:58.470 回答
2

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

Like的问题在于它可能会匹配不需要的术语 - %physics% 的 Like 也会匹配“天文物理学”课程 - 这可能不是你想要的。

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

于 2012-09-12T08:48:34.890 回答
1

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

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小提琴

于 2012-09-12T09:17:58.190 回答