)--------------------------->>将"R7-R9"之类的数据,转成"R7,R8,R9" ?

本文介绍了一个用于修正字符串中范围表达式的SQL函数。该函数能够将类似'R7-R14'这样的范围转换为独立的元素列表'R7,R8,...,R14'。通过递归处理输入字符串中的每个范围,函数实现了复杂范围表达式的正确解析。

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

更正一个bug,适应最后一个是-的

alter function fn_convert(
@s varchar(300)
)
returns varchar(300)
as
begin
declare @r varchar(300)
declare @t varchar(300)
declare @f varchar(30)
declare @i int
declare @j int
set @t=@s
set @r=''
        while charindex('-',@t)>0
begin
set @r=@r+left(@t,charindex('-',@t)-1)
set @t=stuff(@t,1,charindex('-',@t),'')
set @i=cast(REVERSE(left(REVERSE(@r),PATINDEX('%[^0-9]%',REVERSE(@r))-1)) as int)+1
set @f=left(@t,PATINDEX('%[0-9]%',@t)-1)
set @t=stuff(@t,1,PATINDEX('%[0-9]%',@t)-1,'')
set @j=left(@t,PATINDEX('%[^0-9]%',@t+'a')-1)
set @t=stuff(@t,1,PATINDEX('%[^0-9]%',@t+'a')-1,'')
while @i<
=@j
begin
set @r=@r+','+@f+cast(@i as varchar)
set @i=@i+1
end
end
if @t<>''
set @r=@r+@t
return @r
end
go

--调用测试
select dbo.fn_convert('R1,R7-R14,R40-R45')
--结果
----------------------------------------------------------
R1,R7,R8,R9,R10,R11,R12,R13,R14,R40,R41,R42,R43,R44,R45

(所影响的行数为 1 行)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值