SQL内置函数Charindex用法(遍历数据并查找某一数据进行累加)

SQL内置函数Charindex用法

Author/cadenza7

 

--Example 1

DECLARE   @StartPosition   INT
DECLARE   @EndPosition   INT
DECLARE   @str   NVARCHAR(100)
DECLARE   @StrLeng   INT
SET   @StartPosition=charindex('aa', 'dddddaaJackJonesbbbfffffff')
--SET   @StartPosition=patindex('%aa%', 'dddddaaJackJonesbbbfffffff')
SELECT   @StartPosition
SET   @EndPosition=charindex('bbb', 'dddddaaJackJonesbbbfffffff')
SELECT   @EndPosition
SET @StrLeng=@EndPosition-@StartPosition
SET @str=substring('dddddaaJackJonesbbbfffffff',@StartPosition+len('aa'),@EndPosition-@StartPosition-len('aa'))
SELECT   @str

--Out: JackJones

 

--Example 2

DECLARE @Count INT
DECLARE @Range NVARCHAR(1000)
DECLARE @Position INT
DECLARE @Type NVARCHAR(10)
set @Type='C1'
set @Range=(select jyfw from dbo.DriverSchool where ssdq=53060000 and id='53060000000001')
select @Range as '经营范围'
SET @Position=charindex(@Type,@Range )
SELECT @Position
set @Range=substring(@Range,@Position,10)
SELECT @Range
SET @Position=charindex('',@Range)
SELECT @Position
set @Count=substring(@Range,len(@Type)+2,@Position-(len(@Type)+2))
select @Count

--Out: 130

 

--Example 3

--遍历数据并查找VarChar中的某一类型的数据进行累加

--使用非游标方式遍历数据库中的记录
select jyfw,* from dbo.DriverSchool where ssdq=53290000 order by id asc
DECLARE @Count INT
DECLARE @Range NVARCHAR(1000)
DECLARE @Position INT
DECLARE @Type NVARCHAR(10)
--声明循环用的“指针”
declare @min varchar(20)
--赋初值
select  @min=min(id) from dbo.DriverSchool where ssdq=53290000
Set @Count=0
--开始循环
while @min is not null
begin
 set @Type='B2' --A1、A2、A3、B1、B2、C1、C2、C3、C4、D、E等等
 set @Range=(select jyfw from dbo.DriverSchool where ssdq=53290000 and id=@min)
 --select @Range as '经营范围'
 SET @Position=charindex(@Type,@Range )
 --SELECT @Position
 if @Position=0
 begin
  select  @min=min(id) from dbo.DriverSchool where ssdq=53290000 and id>@min  --更新“指针”内容,使之移到下一记录
  continue
 end
 set @Range=substring(@Range,@Position,10)
 --SELECT @Range
 SET @Position=charindex('',@Range)
 --SELECT @Position
 if @Position=0
 begin
  select  @min=min(id) from dbo.DriverSchool where ssdq=53290000 and id>@min  
  continue
 end
 set @Count=@Count+convert(int,substring(@Range,len(@Type)+2,@Position-(len(@Type)+2)))
 --print @min  --打印当前“指针”的值
 select  @min=min(id) from dbo.DriverSchool where ssdq=53290000 and id>@min 
end
select @Type+':'+convert(varchar(10),@Count) as 'Count'

--Out: B2:173

至此实现方式已经完成,如需更强的扩展性可考虑封装成存储过程,并对where条件以及@type和@Position等参数进行传递,最后返回@Count就可以。

 

版权所有,转载请务必保留以下信息,否则将追究法律责任!!!

作者主页 http://blog.csdn.net/cadenza7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值