日期:2014-05-19  浏览次数:20453 次

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 '