有点急的问题

cenlmmx 2006-03-29 04:03:10
表的一个字段varchar类型,select * from a where f1=@var(传入参数)
f1比如为"AA,BGF,YH",@var为"BGF,YH,AA".也就是说相同的值,只是排列顺序不同.
怎么写个简单函数来判断相等?当然可以SUBSTRING()一个一个取来判断,显得比较麻烦.
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cenlmmx 2006-03-29
  • 打赏
  • 举报
回复
数据库做这种工作实在是差劲,本来想在前台split(),可就改得多了.
谢谢楼上朋友.
李必胜 2006-03-29
  • 打赏
  • 举报
回复
select * from a where f1 in ('BGF,YH,AA',
'BGF,AA,YH',
'YH,AA,BGF',
'YH,BGF,AA',
'AA,BGF,YH',
'AA,YH,BGF')
cenlmmx 2006-03-29
  • 打赏
  • 举报
回复
to chenqianlong(443)
应该是select * from from a where kk(f1,@var)=1 and kk(@var,f1)=1吧
因为function只是判断val2 是否被val1包含.
子陌红尘 2006-03-29
  • 打赏
  • 举报
回复
--创建用户定义函数
create function f_StrCmp(
@strA varchar(1000), --源字符串
@strB varchar(1000), --目的字符串
@separator varchar(10)) --分隔符
returns int --1:匹配一致;else:匹配不一致
as
begin
while charindex(@separator,@strB)>0
begin
if charindex(@separator+left(@strB,charindex(@separator,@strB)-1)+@separator,@separator+@strA+@separator)=0
return 0
set @strB=stuff(@strB,1,charindex(@separator,@strB)+len(@separator)-1,'')
end
return 1
end
go

--调用示例:
select dbo.f_StrCmp('AAAA,BBBB,CCCC','CCCC,BBBB,AAAA',',')
select dbo.f_StrCmp('AAAA,BBB,CCCC','CCCC,BBBB,AAAA',',')
go

--楼主的SQL可修改为:select * from a where dbo.f_StrCmp(f1,@var,',')=1

--删除用户定义函数
drop function f_StrCmp
cenlmmx 2006-03-29
  • 打赏
  • 举报
回复
最好不要建临时表,越简单越好
chenqianlong 2006-03-29
  • 打赏
  • 举报
回复
select jobno from pfm..spylog group by jobno order by max(casetype)


create function kk(@val1 varchar(1000),@val2 varchar(1000))
returns varchar(10)
as
declare @value varchar(20)
set @val2=@val2+';'
while len(@val2)>1
begin
set @value=substring(@val2,1,charindex(';',@val2))
if charindex(@value,@val1)=0
return false
set @val2 = right(@val2,len(@val2)-charindex(';',@val2)-1)
end
return true
go
eddy8863 2006-03-29
  • 打赏
  • 举报
回复
建一个表,把内容写入字段中行吗

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧