[MSSQL]检查给定串是否存在于由区间及点集的结合内

本文提供了一个函数,用于在包含多个电话号码的字符串中查找特定的电话号码,并返回其是否存在于该序列中。
------------------------------------ -- Author: happyflystone -- Date:2009-07-20 -- Parameter: @CardString -- 被查询的串,形如:-13300001234,13300002230,13300002300 -- @CardNo 要查询的串 -- Return : int 0 -- 不存在于搜索串的范围内 -- 1 -- 存在于 -- 转载请注明出处。更多请访问: http://blog.youkuaiyun.com/happyflystone -- 原帖地址: http://blog.youkuaiyun.com/happyflystone/archive/2009/07/21/4365264.aspx ------------------------------------ --创建函数 Create function IsInCardString(@CardString varchar(8000),@CardNo varchar(11)) returns int as begin declare @temp table(a varchar(200)) declare @i int set @CardString = rtrim(ltrim(@CardString))+',' set @i = charindex(',', @CardString) while @i >= 1 begin insert @temp values(left(@CardString, @i - 1)) set @CardString = substring(@CardString, @i + 1, len(@CardString) - @i) set @i = charindex(',', @CardString) end if exists(select 1 from ( select case when charindex('-',a) > 0 then left(a,11) else a end as s, case when charindex('-',a) > 0 then right(a,11) else a end as e from @temp ) a where @CardNo between s and e) set @i= 1 else set @i= 0 return @i end go --测试示例 declare @CardString varchar(1000) set @CardString ='13300000000-13300001234,13300002230,13300002300,13300002302,13300004101-13300004204,13300004212,13300004310' declare @CardNo varchar(1000) set @CardNo = '13300000001' --存在 select dbo.IsInCardString(@CardString,@CardNo) as result1 set @CardNo = '13300001235' --不存在 select dbo.IsInCardString(@CardString,@CardNo) as result2 --运行结果 /* result1 ----------- 1 result2 ----------- 0 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值