利用表变量和spt_values表来比较两个字串是否相等

      今天在论坛上看到有一位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

    如有不妥之处,欢迎各位大侠指正,不胜感激。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值