主页 > 知识库 > SQL计算字符串中最大的递增子序列的方法

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

热门标签:百度竞价排名 服务外包 呼叫中心市场需求 AI电销 地方门户网站 Linux服务器 铁路电话系统 网站排名优化

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

数据库环境: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

求出的最大子序列是

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

您可能感兴趣的文章:
  • 通过SQLSERVER重启SQLSERVER服务和计算机的方法
  • 利用php+mysql来做一个功能强大的在线计算器
  • 在php和MySql中计算时间差的方法
  • mysql 字符串长度计算实现代码(gb2312+utf8)
  • SQL2005CLR函数扩展-深入环比计算的详解
  • SQLSERVER 根据地图经纬度计算距离差示例
  • 用sql实现18位身份证校验代码分享 身份证校验位计算
  • SQL语句计算两个日期之间有多少个工作日的方法
  • 如何计算多个订单的核销金额

标签:衡水 黄山 湖南 崇左 兰州 仙桃 湘潭 铜川

巨人网络通讯声明:本文标题《SQL计算字符串中最大的递增子序列的方法》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266