比较字符串是否相等
2006-12-05 20:34
417 查看
表的一个字段varchar类型,select * from a where f1=@var(传入参数)
f1比如为"AA,BGF,YH",@var为"BGF,YH,AA".也就是说相同的值,只是排列顺序不同.
怎么写个简单函数来判断相等?当然可以SUBSTRING()一个一个取来判断,显得比较麻烦.
--创建用户定义函数
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
------------------------------------------------------通用的比较函数
create function F_StrCompare(@str1 varchar(8000),@str2 varchar(8000))
returns int
as
begin
declare @cnt int,@num int
select @cnt=0,@num=(case when len(@str1)>len(@str2) then len(@str1) else len(@str2) end)
while @num>0
begin
if substring(@str1,@num,1)=substring(@str2,@num,1)
set @cnt=@cnt+1
set @num=@num-1
end
return @cnt
end
go
declare @t table(id int,[desc] varchar(1000))
insert into @t select 1,'我的家在这里?'
insert into @t select 1,'我的家在浙江?'
---------------------选出与'我的家在哪里?'最接近的结果
select top 1 * from @t order by dbo.F_StrCompare('我的家在哪里?',[desc]) desc
/*
id desc
----------- -----------------------
1 我的家在这里?
*/
drop function F_StrCompare
f1比如为"AA,BGF,YH",@var为"BGF,YH,AA".也就是说相同的值,只是排列顺序不同.
怎么写个简单函数来判断相等?当然可以SUBSTRING()一个一个取来判断,显得比较麻烦.
--创建用户定义函数
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
------------------------------------------------------通用的比较函数
create function F_StrCompare(@str1 varchar(8000),@str2 varchar(8000))
returns int
as
begin
declare @cnt int,@num int
select @cnt=0,@num=(case when len(@str1)>len(@str2) then len(@str1) else len(@str2) end)
while @num>0
begin
if substring(@str1,@num,1)=substring(@str2,@num,1)
set @cnt=@cnt+1
set @num=@num-1
end
return @cnt
end
go
declare @t table(id int,[desc] varchar(1000))
insert into @t select 1,'我的家在这里?'
insert into @t select 1,'我的家在浙江?'
---------------------选出与'我的家在哪里?'最接近的结果
select top 1 * from @t order by dbo.F_StrCompare('我的家在哪里?',[desc]) desc
/*
id desc
----------- -----------------------
1 我的家在这里?
*/
drop function F_StrCompare
相关文章推荐
- 比较字符串是否相等
- shell比较两个字符串是否相等
- 有关上次的字符串是否相等的比较
- qt 比较两个字符串是否相等
- javascript中比较字符串是否相等的方法
- Java中比较两个字符串是否相等的问题
- [汇编] 比较2个字符串是否相等
- shell比较两个字符串是否相等
- Shell脚本 字符串大小比较 字符串是否相等比较 字符串是否为空判断
- mybatis中使用if标签比较两个字符串是否相等
- ORACLE中两个有可能都为NULL的字符串是否相等的比较
- 比较两个JSON字符串是否完全相等
- 比较两个字符串是否相等
- ORACLE中字符串是否相等的比较
- c\c++中比较两个字符串或string对象是否相等
- shell比较两个字符串是否相等
- 【JAVA小结】字符串比较是否相等
- c语言比较两个字符串是否相等strcmp
- 有关上次的字符串是否相等的比较
- 比较两个字符串是否相等的shell代码