您的位置:程序门 -> ms-sql server -> 基础类



求sql语句!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求sql语句![已结贴,结贴人:panyong751118]
发表于:2007-01-31 15:55:44 楼主
某列中的记录为用逗号隔开的字符串,如 ",a,b,c,d, "
现在要匹配查询条件,如
",a, "或
",a,c, "或
",b,c,d, "等都返回真

若是 ",e,f, "则返回假。

该sql语句该怎么写啊?
发表于:2007-01-31 16:06:501楼 得分:20
declare   @id   varchar(20)
set   @id= ',a,b,c,d, '
  select       列名   from   表名
where   charindex( ', '+rtrim(列名)+ ', ',   ', '+@id+ ', ')> 0
发表于:2007-01-31 16:09:232楼 得分:20
create   function   dbo.f_comparestr(
@s1     varchar(8000),     --要比较的第一个字符串
@s2     varchar(8000),     --要比较的第二个字符串
@split   varchar(10)         --数据分隔符
)returns   bit
as
begin
declare   @splitlen   int
set   @splitlen=len(@split+ 'a ')-2
while   charindex(@split,@s1)> 0
begin
if   charindex(@split+left(@s1,charindex(@split,@s1)-1)+@split,@split+@s2+@split)> 0
return(1)
set   @s1=stuff(@s1,1,charindex(@split,@s1)+@splitlen, ' ')
end
return(case   when   charindex(@split+@s1+@split,@split+@s2+@split)> 0   then   1   else   0   end)
end

select   value   =   case   when   dbo.f_comparestr( 'a ', ',a,b,c,d, ', ', ')   =   1   then   'true '   else   'false '   end
select   value   =   case   when   dbo.f_comparestr( 'a,c ', ',a,b,c,d, ', ', ')   =   1   then   'true '   else   'false '   end
select   value   =   case   when   dbo.f_comparestr( 'b,c,d ', ',a,b,c,d, ', ', ')   =   1   then   'true '   else   'false '   end
select   value   =   case   when   dbo.f_comparestr( 'e,f ', ',a,b,c,d, ', ', ')   =   1   then   'true '   else   'false '   end
发表于:2007-01-31 16:11:143楼 得分:10
select   *   from   tablename   where   charindex(columnname, ',b,c ')> 0
发表于:2007-01-31 16:20:474楼 得分:20
如果条件是只要包含一个相同字母就为真的话,不妨这样简单:
declare   @t   table(a   varchar(100))
insert   into   @t   select   ',a,b,c,d, '
select   count(1)   from   @t   where   a   like   '%[a]% '
select   count(1)   from   @t   where   a   like   '%[ac]% '
select   count(1)   from   @t   where   a   like   '%[bcd]% '
select   count(1)   from   @t   where   a   like   '%[ef]% '

-----
1
1
1
0
发表于:2007-01-31 16:28:135楼 得分:10
呵呵...有点意思!

流氓兄的有意思!对,可以在传入的参数那里进行控制,这样速度快!嘿嘿!
发表于:2007-01-31 16:53:186楼 得分:20
declare   @des   varchar(100)
set   @des   =   ',e,f, '
set   @des   =   replace(@des,   ', ',   ',%, ')
set   @des   =   substring(@des,   2,   len(@des)   -   2)
if   ',a,b,c,d, '   like   @des
        print   1
else
        print   0


快速检索

最新资讯
热门点击