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

本文介绍了一个SQL函数,用于判断一个电话号码是否存在于指定的电话号码字符串范围内。通过创建临时表并解析输入字符串来实现,支持单个号码及区间查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------------------------------------

-- Author: happyflystone

-- Date:2009-07-20

-- Parameter: @CardString 被查询的串,形如:13300000000-13300001234,13300002230,13300002300

-- @CardNo 要查询的串

-- Return : int 0 -- 不存在于搜索串的范围内

-- 1 -- 存在于

-- 转载请注明出处。更多请访问: http://blog.youkuaiyun.com/happyflystone

------------------------------------

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)

set @CardNo = '13300001235' --不存在

select dbo.IsInCardString(@CardString,@CardNo)

/*

-----------

1

(所影响的行数为 1 行)

-----------

0

(所影响的行数为 1 行)

*/

drop function IsInCardString

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值