• SQL利于CHARINDEX循环


    对于在SQL里循环是件挺难受的事,虽然可以利用游标,但是游标的表如果正在被频繁使用那就悲剧了,于是只能想别的方法循环了,这里利用CHARINDEX循环。循环的模式可以是存储过程查询传递过来的内含规则的变量,也可以是数据库数据,如果是传递的变量看下面的代码即可。

    declare @str varchar(100) --字符串
    declare @k int --字符串的断点位置 数值型
    declare @start int --当前字符串开始位置
    set @str='<a111><a222><a333>'
    set @start=2
    set @k=charindex('>',@str,@start)

    --print 'f'+substring(@str ,0,2)
    while @k>0
    begin
     print '当前位置'+cast(@k as char(5))
    declare @nowstr varchar(100)
    set @nowstr=substring(@str,@start ,@k-@start)--断点位置减去开始位置 为字符串长度
    print '字符串开始位置'+cast(@start as char(5))  +'截取数量'+cast(@k-@start as char(5))+''

    --使用字符串@nowstr 操作

    set @start=@k+2 --重设开始截取字符串位置
    print '截取的字符串'+@nowstr

    set  @k=charindex('>',@str,@k+1)

    end

    如果是数据库的数据,那就得先查询出来,才能遍历,怎么查询呢?利于SQL的FOR XML PATH('')

    Select id from table FOR XML PATH('')

    查询出来的结果就是<a111><a222><a333>模式,这样就可以用上面的方法了

  • 相关阅读:
    AtCoder Grand Contest 005F
    AtCoder Regular Contest 095E
    插头DP--URAL1519Formula 1
    「CodePlus 2018 3 月赛」白金元首与莫斯科
    hdu 5795
    hdu 5800
    HDU5802
    hdu 5787 数位dp,记忆化搜索
    poj 1015
    hdu 3092 (简化的素数打表+dp+log的用法) ps(开数组和预处理时数组要大点处理多一点。。。)
  • 原文地址:https://www.cnblogs.com/kiba/p/SQL.html
Copyright © 2020-2023  润新知