我有一张桌子
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”或用逗号分隔的字符串的任意组合。
答案 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+',%'
)