zoukankan      html  css  js  c++  java
  • cte+xml

    --2005
    select  * into  ##   from(select sring='xxxxx(2弄)(3路)xxx()xxx' union all select 'dad(0d)da(da)da()ss')x

    --cte+nums   解决
    with xwj
    as
    (select id=1
    union all
    select id+1 from xwj where id<=80
    ) ,
    xwj2
    as
    (
    select sring,id ,substring(sring,id,charindex(')',sring+')',id)-id+1)as sonsring
    from ## as a inner join xwj as b on len(a.sring)>=id and substring(')'+sring,id,1)=')'
    )
    ,
    xwj3
    as
    (
    select sring,id,px=row_number()over(partition by sring order by id),
    substring(sonsring,1,charindex('(',sonsring)) +substring(sonsring,case when charindex(')',sonsring)=0 then 1 else charindex(')',sonsring)end ,len(sonsring)) as sonsring
      from xwj2
    )
    ,
    xwj4
    as
    (select sring,px,cast(sonsring as varchar(500)) as sonsring from xwj3 where px=1
    union all
    select b.sring,b.px,cast(a.sonsring+b.sonsring as varchar(500)) from xwj4 as a inner join xwj3 as b on a.sring=b.sring and b.px=a.px+1
    )
    select sonsring as sring from xwj4 as a where  px=(select max(px) from xwj3 as b where a.sring=b.sring)

    结果
    sring
    ----------
    xxxxx()()xxx()xxx
    dad()da()da()ss

    --xml+cte
    select * from ##

    with
    xwj
    as
    (
    select x.sring,px=row_number()over(partition by sring order by (select 1)),
            substring(v,1,charindex('(',v)) +substring(v,case when charindex(')',v)=0 then 1 else charindex(')',v)end ,len(v)) as sonsring
    from
    (select sring,cast('<row>'+replace(sring,')',')</row><row>')+'</row>' as xml) as sonsring
      from  ## )x
    cross apply
    (select v=t.c.value('.','sysname')
       from x.sonsring.nodes('row') as t(c)
    ) as b
    )
    ,
    xwj2
    as
    (select  sring,px,cast(sonsring as varchar(500)) as sonsring from xwj where px=1
    union all
    select b.sring,b.px,cast(a.sonsring+b.sonsring as varchar(500)) from xwj2 as a inner join xwj as b on a.sring=b.sring and a.px=b.px-1
    )
    select sonsring as sring from xwj2  as b where px=(select max(px) from xwj as a where a.sring=b.sring)

    结果:
    sring
    ----------
    xxxxx()()xxx()xxx
    dad()da()da()ss


    第二个比第一个要好 速度快 io少

  • 相关阅读:
    c# DateTime 格式化输出字符串
    计算运行时长
    ubuntu helpers
    json.net omit member
    git 本地项目关联新repo
    c# DirectoryEntry LDAPS
    为视图或函数指定的列名比其定义中的列多
    Java反序列化漏洞学习笔记
    流量抓包
    软件安全策略-下
  • 原文地址:https://www.cnblogs.com/xwj1985/p/1713355.html
Copyright © 2011-2022 走看看