比如, 条件是 XXXXX and zzzzzzz and (content has (1 and 2)) and yyyyyyyy and kkkkkkkk
"i have"只是数据的一部分,不代表任何意思。 1 and 2 也只是例子,有可能是 a and b,或者更复杂的 a and b and c or d, (a and (b or c)) or d 。
content就是一个纯粹的字符型字段。
这个我想你还是在前台处理吧前台拆分好,组合成sql语句然后再进行查询
我现在不知道你前台的 a and b or c 是怎么出来的如果可能在前台可以构造成这样 a and b or c ======>>> charindex('a',content)>0 and charindex('b',content)>0 or charindex('c',content)>0 也就是每个值换成这样 charindex('值',content)>0 这样在后台就可以直接查询了exec('select * from t where '+@传入值)
charindex('a',content)>0 and charindex('b',content)>0 or charindex('c',content)>0 可以这样的。可是,这样能把条件适用于相同用户的不同纪录范围吗?
得先要对 记录集进行一下整合 id name content a1 name1 i have 1 i have 2 --变成这样 c2 name2 i have 1 d3 name3 i have 2 e4 name4 i have 1 and 2
或者写一个函数,作用输入 name1 输入出 i have 1 i have 2然后 charindex('a',dbo.函数名(name))>0 and charindex('b',dbo.函数名(name))>0 or charindex('c',dbo.函数名(name))>0
也就是把同一个name的对应的content 连到一起,再进行判断
charindex('a',dbo.函数名(name))>0 and charindex('b',dbo.函数名(name))>0 or charindex('c',dbo.函数名(name))>0 这样似乎不错哦。不过,能把整合前的纪录集给取出来吗? 建临时表呢? 关键是可不可以把整合前的原始记录取出来。 :(我的SQL很基础,请多多指教
charindex('a',dbo.函数名(name))>0 and charindex('b',dbo.函数名(name))>0 or charindex('c',dbo.函数名(name))>0 如果这样就不用整合记录集,可以直接查了... 没问题的,你自己试试
--创建一个处理的自定义函数 create function f_merg(@po char(3)) returns varchar(8000) as begin declare @re varchar(8000) set @re='' select @re=@re+','+convert(varchar(10),DueDate,111) from pom where po=@po return(substring(@re,2,8000)) end go--调用实现你的查询 select po,DueDate=dbo.f_merg(po) from pom group by po
不好意思,E4是后来补上的,为了说明 1 AND 2的情况 当检索条件为 1 or 2的时候,检索结果如下: id name content a1 name1 i have 1 b1 name1 i have 2 c2 name2 i have 1 d3 name3 i have 2 e4 name4 i have 1 and 2
现在,我重新整理一下范例: 有如下纪录: id name content a1 name1 i have 1 b1 name1 i have 2 c2 name2 i have 1 d3 name3 i have 2 e4 name4 i have 1 ,2 f1 name1 i have 3说明: 1。id的最后1位代表一个用户,这里,用户1(name1)有3条纪录,用户2(name2)、用户3(name3)和用户4(name4)各有1条纪录; 2。用content作为关键字的检索对象。当检索条件为 1 or 2的时候,检索结果如下: id name content a1 name1 i have 1 b1 name1 i have 2 c2 name2 i have 1 d3 name3 i have 2 e4 name4 i have 1 ,2当检索条件为 1 and 2的时候,检索结果如下: id name content a1 name1 i have 1 b1 name1 i have 2 e4 name4 i have 1 ,2此外,生成的条件并不是 1 or 2 / 1 and 2 这样简单, 有可能是(a or b) and ((c or d) or e)……
1 and 2 也只是例子,有可能是 a and b,或者更复杂的 a and b and c or d, (a and (b or c)) or d 。
a and b or c
======>>>
charindex('a',content)>0 and charindex('b',content)>0 or charindex('c',content)>0 也就是每个值换成这样 charindex('值',content)>0 这样在后台就可以直接查询了exec('select * from t where '+@传入值)
可以这样的。可是,这样能把条件适用于相同用户的不同纪录范围吗?
记录集进行一下整合
id name content
a1 name1 i have 1 i have 2 --变成这样
c2 name2 i have 1
d3 name3 i have 2
e4 name4 i have 1 and 2
这样似乎不错哦。不过,能把整合前的纪录集给取出来吗?
建临时表呢?
关键是可不可以把整合前的原始记录取出来。 :(我的SQL很基础,请多多指教
没问题的,你自己试试
create function f_merg(@po char(3))
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+convert(varchar(10),DueDate,111)
from pom where po=@po
return(substring(@re,2,8000))
end
go--调用实现你的查询
select po,DueDate=dbo.f_merg(po)
from pom
group by po
当检索条件为 1 or 2的时候,检索结果如下:
id name content
a1 name1 i have 1
b1 name1 i have 2
c2 name2 i have 1
d3 name3 i have 2
e4 name4 i have 1 and 2
有如下纪录:
id name content
a1 name1 i have 1
b1 name1 i have 2
c2 name2 i have 1
d3 name3 i have 2
e4 name4 i have 1 ,2
f1 name1 i have 3说明:
1。id的最后1位代表一个用户,这里,用户1(name1)有3条纪录,用户2(name2)、用户3(name3)和用户4(name4)各有1条纪录;
2。用content作为关键字的检索对象。当检索条件为 1 or 2的时候,检索结果如下:
id name content
a1 name1 i have 1
b1 name1 i have 2
c2 name2 i have 1
d3 name3 i have 2
e4 name4 i have 1 ,2当检索条件为 1 and 2的时候,检索结果如下:
id name content
a1 name1 i have 1
b1 name1 i have 2
e4 name4 i have 1 ,2此外,生成的条件并不是 1 or 2 / 1 and 2 这样简单,
有可能是(a or b) and ((c or d) or e)……