栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 数据库 > SQL Server

SQL计算字符串中最大的递增子序列的方法

SQL Server 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL计算字符串中最大的递增子序列的方法

求字符串中最大的递增子序列

数据库环境:SQL SERVER 2005

如题,求字符串“abcbklmnodfghijkmer”中最大的递增子序列。这个字符串有点特别,

只由26个小写字母a-z组成。

大概思路如下:

1.将字符串转到一列存储,并生成行号

2.设置一个递增计数器列,默认为1,比较上下行的字符,如果在字典中的顺序是递增,

则计数器加1,否则,计数器置1

3.找出计数器最大的数及对应的行号,根据这2个数截取字符串

思路有了,下面直接贴代码

DECLARE @vtext VARCHAr(255)
SET @vtext = 'abcbklmnodfghijkmer'

WITH x0
   AS ( SELECt number AS id ,
      SUBSTRINg(@vtext, number, 1) AS letter
    FROM  master.dbo.spt_values
    WHERe type = 'P'
      AND number <= LEN(@vtext)
      AND number >= 1
    ),
  x1 ( id, letter, clen )
   AS ( SELECt id ,
      letter ,
      1 AS clen
    FROM  x0
    WHERe id = 1
    UNIOn ALL
    SELECt x0.id ,
      x0.letter ,
      CASE WHEN x1.letter <= x0.letter THEN x1.clen + 1
 ELSE 1
      END AS clen
    FROM  x0 ,
      x1
    WHERe x0.id = x1.id + 1
    )
 
 SELECt SUBSTRINg(@vtext, start, sublen) AS 最大子序列
 FROM ( SELECt id ,
      clen ,
      MAX(clen) OVER ( ) AS maxclen ,
      id - MAX(clen) OVER ( ) + 1 AS start ,
      MAX(clen) OVER ( ) AS sublen
    FROM  x1
   ) t
 WHERe clen = maxclen

求出的最大子序列是

通过以上的思路和代码,希望可以对大家有所启迪和帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/172508.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号