SQL判断相等问题,急....
在SQLServer里有俩个字符串@a= ',2,4,7 ' @b= ',7,2,4 '怎么判断他俩相等啊.我的意思是,只要@a和@b里面的数字相同就认为他俩相等,和顺序没关系.
谢谢了.直接if(@a=@b)是肯定不行的啊,该如何判断才能让他俩相等啊...
------解决方案--------------------拆了按顺序比较一次就行了
------解决方案--------------------if object_id( 'fnTest_ASC ') is not null
drop function fnTest_ASC
GO
----创建字符ASCII码值计算函数
create function fnTest_ASC(@str varchar(100))
returns int
as
begin
declare @asc int
set @asc = 0
while @str <> ' '
begin
set @asc = @asc + ascii(substring(@str,1,1))
set @str = stuff(@str,1,1, ' ')
end
return @asc
end
GO
----比较字符串
declare @a varchar(10),@b varchar(10)
set @a= ',2,4,7 '
set @b= ',7,2,4 '
select case when dbo.fnTest_ASC(@a) = dbo.fnTest_ASC(@b) then '相等 ' else '不相等 ' end
----清除测试环境
drop function fnTest_ASC
/*结果
相等
*/
------解决方案--------------------楼上函数不错.
------解决方案--------------------四钻,真牛!
------解决方案--------------------真的
------解决方案--------------------楼上的函数是不对的。
ASC的合计值的比较对于
set @a= ',2,4,7 '
set @b= ',7,2,4 ' 是成立的
对于
set @a= ',3,4,6 '
set @b= ',7,2,4 ' 也成立啊
所以不能直接通过ASCII转码来比较
------解决方案--------------------用split函数拆分两个串,比较两个结果集的异同。
/*
功能:实现split功能的函数
*/
create function fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)
while @i > = 1
begin
insert @temp values(left(@inputstr, @i - 1))
set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end
if @inputstr <> '\ '
insert @temp values(@inputstr)
return
end
------解决方案--------------------用split函数拆分两个串,比较两个结果集的异同。
/*
功能:实现split功能的函数
*/
create function fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)
while @i > = 1
begin
insert @temp values(left(@inputstr, @i - 1))
set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end
if @inputstr <> '\ '
insert @temp values(@inputstr)
return
end
这个比较具有操作性,顶一下。
------解决方案--------------------学习
------解决方案--------------------declare @a varchar(10),@b varchar(10)
set @a= ',2,4,7 '
set @b= ',7,2,4 '