做信息发布时,会要求选择此条信息的关键字,用如下方法实现[align=center][/align]当点击确定时,会形成如下关键字“汽机分场,锅炉分场,热工分场,停1号机,停5号机,停6号机,停3号炉,停4号炉,停公用系统,停循环水系统,停工业水系统”或者是没有选中 “停止” 的 checkbox 时会生成如下“汽机分场,锅炉分场,热工分场,1号机,5号机,6号机,3号炉,4号炉,公用系统,循环水系统,工业水系统”然后,将上面生成的关键字存入数据库表 Defects 中的字段 KeyWords---------------------------------------------------------当做信息查询时,同样弹出以上那个关键字对话框,取得查询字符串,当然取得的关键字形式跟当初录入信息产生关键字方法是一样的。
比如,查询时取得的关键字也是这样的“汽机分场,热工分场,停1号机,停5号机,停公用系统,停循环水系统”那现在我的问题就是,这样的查询 sql语句要如何写呢?比如:strring getKeywords = "汽机分场,热工分场,停1号机,停5号机,停公用系统,停循环水系统";
string sqlSearch = "select Defects where ..........................................";请高人指点!多谢了!!
比如,查询时取得的关键字也是这样的“汽机分场,热工分场,停1号机,停5号机,停公用系统,停循环水系统”那现在我的问题就是,这样的查询 sql语句要如何写呢?比如:strring getKeywords = "汽机分场,热工分场,停1号机,停5号机,停公用系统,停循环水系统";
string sqlSearch = "select Defects where ..........................................";请高人指点!多谢了!!
KEY然后再和你的原表关联查询 LIKE
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (id int,name varchar(8))
insert into #T
select 1,'jame,job' union all
select 2,'paul,mc' union all
select 3,'carl';--> 1. CTE 递归找分隔字符位置法:速度极快
with T (id,P1,P2) as
(
select id,charindex(',',','+name),charindex(',',name+',')+1 from #T
union all
select a.id,b.P2,charindex(',',name+',',b.P2)+1 from #T a join T b on a.id=b.id where charindex(',',name+',',b.P2)>0
)
select a.id,name=substring(a.name+',',b.P1,b.P2 - b.P1 - 1) from #T a join T b on a.id=b.id order by 1
/*
id name
----------- ---------
1 jame
1 job
2 mc
2 paul
3 carl
*/
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (id int,name varchar(8))
insert into #T
select 1,'jame,job' union all
select 2,'paul,mc' union all
select 3,'carl';--> 2. 临时表法:速度比CTE方法相差无几
if object_id('tempdb.dbo.#') is not null drop table #
select top 8000 id=identity(int,1,1) into # from syscolumns,sysobjects --> select max(len(name)) from #T=11
select a.id,name=substring(a.name+',',b.id,charindex(',',a.name+',',b.id+1)-b.id) from #T a inner join # b on substring(','+a.name,b.id,1)=','
/*
id name
----------- ---------
1 jame
1 job
2 mc
2 paul
3 carl
*/3. XML法:速度较慢
select
a.id,b.name
from
(select id,name=convert(xml,'<root><v>'+replace(name,',','</v><v>')+'</v></root>') from #T ) a
outer apply
(select name=N.v.value('.','varchar(100)') from a.name.nodes('/root/v') N(v)) b
/*
id name
----------- ---------
1 jame
1 job
2 mc
2 paul
3 carl
*/