存储过程的字符串变态截取

需求:

表user
字段usermark
值 100|10|30|0|0|50|60|20|0|50|0

字段usermoney
值 50|10|30|0|0|50|60|20|0|0|30

现在要用存储过程分别取出usermark和usermoney中倒数第四个符号| |之间的值,也就是那个20的值,应该如何截取?(20是可变值,规律为只取倒数第四个| |符号之间的值)

解决方法:

/********************************
表user
字段usermark
值 100|10|30|0|0|50|60|20|0|50|0

字段usermoney
值 50|10|30|0|0|50|60|20|0|0|30

现在要用存储过程分别取出usermark和usermoney中倒数第四个符号| |之间的值,也就是那个20的值,应该如何截取?(20是可变值,规律为只取倒数第四个| |符号之间的值)
*********************************/
USE XJS
CREATE TABLE #F
(usermark varchar(800),
 usermoney varchar(800)
)
delete #f
insert into #F
select '100|1030|0|0|50|60|200|50|0','50|10|30|0|0|50|60|20|0|0|30'

SELECT * FROM #F
SELECT REVERSE(usermark),REVERSE(usermoney) FROM #F
/***********反向找到第3个|的起始位置@i,找到第3个|到第4个|的长度@j*********/
DECLARE @i int
DECLARE @j int
DECLARE @k int
DECLARE @t varchar(80)
SET @i=0
SET @k=0
select @j=len(usermark) from #F
WHILE @k<3
BEGIN
SELECT @i=CHARINDEX('|',REVERSE(usermark),@i)+1 FROM #F
SET @k=@k+1
END

SELECT @j=CHARINDEX('|',REVERSE(usermark),@i) FROM #F
/************************************************************************/
SELECT @t=REVERSE(SUBSTRING(REVERSE(usermark),@i,@j-@i)) FROM #F
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值