SQL 中‘收2010级20人3500元30人4000元10人6000元存入’如何将这样的字符串中的数字提取出来

或者分割成几个字符串以便提取有用的数字与信息,20人3500元,30人4000元 这样的。。。哪位大神能给予解答 ,万分感激~~若有好答案还会追加100分,谢谢~~
人数和钱数 的位数不确定 也有个位的~~
最新回答
毒药

2024-11-28 09:47:46

declare @sString nvarchar(200)

-- 第一步从2010级后的第一个字符截取需要的一直到'元'为止
set @sString=N'收2010级20人3500元30人4000元10人6000元存入'
select substring(@sString,instr(@sString,N'级')+1,instr(@sString,N'元'))
--第二步把用过的字符串截取掉
set @sString=substring(@sString,instr(@sString,N'元'))
-- 结果应该为'30人4000元10人6000元存入''
--第三步循环截取剩下的字符,直到字符空为止
while (@sString<>'')
begin
select substring(@sString,1,instr(@sString,N'元'))
set @sString=substring(@sString,instr(@sString,N'元'))
end

说明:大体就可以得到所需要的字符串,应该我电脑没有装SQL,没有执行此代码,你可以试试,调整下位置
随风而去

2024-11-28 12:00:20

如果事固定的长度就好处理啊﹐用SUBSTRING就可以了
SELECT SUBSTRING('收2010级20人3500元30人4000元10人6000元存入',7,8)
SELECT SUBSTRING('收2010级20人3500元30人4000元10人6000元存入',15,8)
追问
谢谢,可能我没有描述清楚,也有不是固定长度的  比如说人数是少于10人的  ,我现在如果就只要人数   能剔出来吗
追答

只要人数的话只能用循环这样写了﹐可以能有更简洁的方法﹐但能力有限哈

DECLARE @S VARCHAR(100)
DECLARE @NEXT INT
DECLARE @STEMP VARCHAR(100)
SET @S='收2010级20人3500元30人4000元10人6000元80人6000元存入'
SET @NEXT=1
WHILE @NEXT<=LEN(@S)-LEN(REPLACE(@S,'人',''))
begin
IF @NEXT=1
BEGIN
SELECT SUBSTRING(@S,PATINDEX('%级%',@S)+1,PATINDEX('%人%',@S)-PATINDEX('%级%',@S))
SET @STEMP=STUFF(@S,PATINDEX('%人%',@S),1,',')
END
ELSE
BEGIN
SELECT SUBSTRING(@STEMP,PATINDEX('%元%',@STEMP)+1,PATINDEX('%人%',@STEMP)-PATINDEX('%元%',@STEMP))
SET @STEMP=STUFF(@STEMP,PATINDEX('%人%',@STEMP),1,',')
SET @STEMP=STUFF(@STEMP,PATINDEX('%元%',@STEMP),1,',')
END
set @NEXT=@NEXT+1
end

效果