SQL計算字符串中最大的遞增子序列的方法
求字符串中最大的遞增子序列
數(shù)據(jù)庫環(huán)境:SQL SERVER 2005
如題,求字符串“abcbklmnodfghijkmer”中最大的遞增子序列。這個字符串有點特別,
只由26個小寫字母a-z組成。
大概思路如下:
1.將字符串轉(zhuǎn)到一列存儲,并生成行號
2.設(shè)置一個遞增計數(shù)器列,默認為1,比較上下行的字符,如果在字典中的順序是遞增,
則計數(shù)器加1,否則,計數(shù)器置1
3.找出計數(shù)器最大的數(shù)及對應(yīng)的行號,根據(jù)這2個數(shù)截取字符串
思路有了,下面直接貼代碼
DECLARE @vtext VARCHAR(255) SET @vtext = 'abcbklmnodfghijkmer' /*講字符串轉(zhuǎn)成一列存儲,并生成行號*/ 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 ),/*實現(xiàn)計數(shù)器*/ 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
求出的最大子序列是
通過以上的思路和代碼,希望可以對大家有所啟迪和幫助。
相關(guān)文章
sql server 2005用戶權(quán)限設(shè)置深入分析
關(guān)于什么是用戶權(quán)限,最簡單的定義可能是,用戶能做什么和不能做什么,本文將詳細介紹sql server 2005用戶權(quán)限設(shè)置,需要了解的朋友可以參考下2012-11-11SQLServer 2005系統(tǒng)配置要求官方說明
SQLServer 2005系統(tǒng)配置要求官方說明,需要安裝sql2005的朋友需要了解下。2009-08-08同時安裝vs2005團隊開發(fā)版和sql 2005企業(yè)版的方法(downmoon原作)
由于微軟在vs2005 vsts團隊開發(fā)版中集成了sql 2005 express,而在SQL 2005中又集成了vs2005 Express,,所以當(dāng)很多用戶同時安裝vs2005團隊開發(fā)?:?sql 2005企業(yè)版(downmoon)時,就會出現(xiàn)數(shù)據(jù)庫連接失敗的case2012-10-10sqlserver中獲取當(dāng)前日期的午夜的時間值的實現(xiàn)方法
MS SQLServer,如何獲取當(dāng)前系統(tǒng)日期的午夜的時間值的方法,需要的朋友可以參考下。2011-09-09Win2008中安裝的MSSQL2005后無法訪問的解決方法
最近筆者一直在使用Win2008系統(tǒng),不過發(fā)現(xiàn)一個很奇怪的問題,那就是在該系統(tǒng)上安裝了SQL2005后,再在其他計算機訪問該主機顯示不能訪問2014-07-07SQL2005CLR函數(shù)擴展-數(shù)據(jù)導(dǎo)出的實現(xiàn)詳解
本篇文章是對SQLServer中數(shù)據(jù)導(dǎo)出的實現(xiàn)進行了詳細的分析介紹,需要的朋友參考下2013-06-06SQL?Server中帶有OUTPUT子句的INSERT,DELETE,UPDATE應(yīng)用
這篇文章介紹了SQL?Server中帶有OUTPUT子句的INSERT,DELETE,UPDATE應(yīng)用,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06簡單有用的SQL腳本 (行列互轉(zhuǎn),查詢一個表內(nèi)相同紀錄等)
本文推薦的SQL腳本都是很實用的哦,學(xué)會了,對在工作中得心應(yīng)手,一起來學(xué)習(xí)學(xué)習(xí)吧。2010-04-04