利用表变量和spt_values表来比较两个字串是否相等
2009-10-15 18:16
501 查看
今天在论坛上看到有一位C友提问,如何判断两组字符串是否相等的问题,刚好把手头的工作忙完,就写了一个函数,测试了一下,感觉没什么问题,大家也可以测试一下,有问题请留言给我。
先看表结构和测试数据:
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([col1] varchar(9),[col2] varchar(9))
insert [tb]
select 'LGALGDLGU','LGALGDLGU' union all
select 'LGALGDLGU','LGALGULGD' union all
select 'LGALGDLGU','LGDLGALGU' union all
select 'LGALGDLGU','LGDLGULGA' union all
select 'LGALGDLGU','LGULAGLGD' union all
select 'LGALGDLGU','LGULGDLGA'
go
数据中不管顺序,只要字符排序后是一样的,就认为是相等的,所以我们不能使用字符函数直接来比较,我的思路大概就是把每个字串放到一个表中,但由于有些字符在串中有重复,所以还得统计他们的个数,所以如果两个字符串相等,最少得满足两个条件:1、两个字符串的不同的字符个数要相等;2、每个字符出现的个数要相等。
以下是我写的函数:
create function str_def(@s1 varchar(100),@s2 varchar(100))
returns int
as
begin
declare @result int
declare @t1 table(col char(1))
declare @t2 table(col char(1))
insert @t1
select substring(@s1,number,1)
from master..spt_values
where type='P' and number between 1 and len(@s1)
insert @t2
select substring(@s2,number,1)
from master..spt_values
where type='P' and number between 1 and len(@s2)
if not exists
(
select 1
from (select col,count(1) as cnt from @t1 group by col) a
where not exists
(
select 1
from (select col,count(1) as cnt from @t2 group by col) b
where a.col=b.col and a.cnt=b.cnt
)
)
set @result=1
else
set @result=0
return @result
end
go
-->查询
select *,dbo.str_def(col1,col2) AS RESULT from tb
-->测试结果:
/*
col1 col2 RESULT
--------- --------- -----------
LGALGDLGU LGALGDLGU 1
LGALGDLGU LGALGULGD 1
LGALGDLGU LGDLGALGU 1
LGALGDLGU LGDLGULGA 1
LGALGDLGU LGULAGLGD 1
LGALGDLGU LGULGDLGA 1
(6 行受影响)
*/
drop function str_def
如有不妥之处,欢迎各位大侠指正,不胜感激。
先看表结构和测试数据:
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([col1] varchar(9),[col2] varchar(9))
insert [tb]
select 'LGALGDLGU','LGALGDLGU' union all
select 'LGALGDLGU','LGALGULGD' union all
select 'LGALGDLGU','LGDLGALGU' union all
select 'LGALGDLGU','LGDLGULGA' union all
select 'LGALGDLGU','LGULAGLGD' union all
select 'LGALGDLGU','LGULGDLGA'
go
数据中不管顺序,只要字符排序后是一样的,就认为是相等的,所以我们不能使用字符函数直接来比较,我的思路大概就是把每个字串放到一个表中,但由于有些字符在串中有重复,所以还得统计他们的个数,所以如果两个字符串相等,最少得满足两个条件:1、两个字符串的不同的字符个数要相等;2、每个字符出现的个数要相等。
以下是我写的函数:
create function str_def(@s1 varchar(100),@s2 varchar(100))
returns int
as
begin
declare @result int
declare @t1 table(col char(1))
declare @t2 table(col char(1))
insert @t1
select substring(@s1,number,1)
from master..spt_values
where type='P' and number between 1 and len(@s1)
insert @t2
select substring(@s2,number,1)
from master..spt_values
where type='P' and number between 1 and len(@s2)
if not exists
(
select 1
from (select col,count(1) as cnt from @t1 group by col) a
where not exists
(
select 1
from (select col,count(1) as cnt from @t2 group by col) b
where a.col=b.col and a.cnt=b.cnt
)
)
set @result=1
else
set @result=0
return @result
end
go
-->查询
select *,dbo.str_def(col1,col2) AS RESULT from tb
-->测试结果:
/*
col1 col2 RESULT
--------- --------- -----------
LGALGDLGU LGALGDLGU 1
LGALGDLGU LGALGULGD 1
LGALGDLGU LGDLGALGU 1
LGALGDLGU LGDLGULGA 1
LGALGDLGU LGULAGLGD 1
LGALGDLGU LGULGDLGA 1
(6 行受影响)
*/
drop function str_def
如有不妥之处,欢迎各位大侠指正,不胜感激。
相关文章推荐
- java 反射比较两个类型相同的对象 内部的变量是否相等
- C#中比较两个值型一维数组变量是否值相等
- Java中,比较两个字符串引用变量是否相等
- C#中比较两个值型一维数组变量是否值相等
- C#中比较两个值型一维数组变量是否值相等
- 判断两个(float)变量x,z是否相等 以及和0值比较方法
- 判断两个( float )变量是否相等以及和 0 值比较方法
- 利用随机化的思想比较两个字符串是否相等
- 判断两个(float)变量x,z是否相等 以及和0值比较方法
- 比较两个对象相等、克隆 、是否允许实例化继承 CLR学习第六课
- Gson:比较两个JSON字符串是否完全相等
- c\c++中比较两个字符串或string对象是否相等
- jquery比较两个数组是否相等,且找出不等的值。
- java中比较两个字符串是否相等
- C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响!
- 比较两个字符串是否相等?
- java 比较两个对象是否相等
- shell比较两个字符串是否相等
- shell比较两个字符串是否相等
- python比较两个列表是否相等的方法