SQL計(jì)算字符串中最大的遞增子序列的方法
求字符串中最大的遞增子序列
數(shù)據(jù)庫(kù)環(huán)境:SQL SERVER 2005
如題,求字符串“abcbklmnodfghijkmer”中最大的遞增子序列。這個(gè)字符串有點(diǎn)特別,
只由26個(gè)小寫(xiě)字母a-z組成。
大概思路如下:
1.將字符串轉(zhuǎn)到一列存儲(chǔ),并生成行號(hào)
2.設(shè)置一個(gè)遞增計(jì)數(shù)器列,默認(rèn)為1,比較上下行的字符,如果在字典中的順序是遞增,
則計(jì)數(shù)器加1,否則,計(jì)數(shù)器置1
3.找出計(jì)數(shù)器最大的數(shù)及對(duì)應(yīng)的行號(hào),根據(jù)這2個(gè)數(shù)截取字符串
思路有了,下面直接貼代碼
DECLARE @vtext VARCHAR(255) SET @vtext = 'abcbklmnodfghijkmer' /*講字符串轉(zhuǎn)成一列存儲(chǔ),并生成行號(hào)*/ 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 ),/*實(shí)現(xiàn)計(jì)數(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ò)以上的思路和代碼,希望可以對(duì)大家有所啟迪和幫助。
- 通過(guò)SQLSERVER重啟SQLSERVER服務(wù)和計(jì)算機(jī)的方法
- 利用php+mysql來(lái)做一個(gè)功能強(qiáng)大的在線(xiàn)計(jì)算器
- 在php和MySql中計(jì)算時(shí)間差的方法
- mysql 字符串長(zhǎng)度計(jì)算實(shí)現(xiàn)代碼(gb2312+utf8)
- SQL2005CLR函數(shù)擴(kuò)展-深入環(huán)比計(jì)算的詳解
- SQLSERVER 根據(jù)地圖經(jīng)緯度計(jì)算距離差示例
- 用sql實(shí)現(xiàn)18位身份證校驗(yàn)代碼分享 身份證校驗(yàn)位計(jì)算
- SQL語(yǔ)句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法
- 如何計(jì)算多個(gè)訂單的核銷(xiāo)金額
相關(guān)文章
sql server 2005用戶(hù)權(quán)限設(shè)置深入分析
關(guān)于什么是用戶(hù)權(quán)限,最簡(jiǎn)單的定義可能是,用戶(hù)能做什么和不能做什么,本文將詳細(xì)介紹sql server 2005用戶(hù)權(quán)限設(shè)置,需要了解的朋友可以參考下2012-11-11SQLServer 2005系統(tǒng)配置要求官方說(shuō)明
SQLServer 2005系統(tǒng)配置要求官方說(shuō)明,需要安裝sql2005的朋友需要了解下。2009-08-08同時(shí)安裝vs2005團(tuán)隊(duì)開(kāi)發(fā)版和sql 2005企業(yè)版的方法(downmoon原作)
由于微軟在vs2005 vsts團(tuán)隊(duì)開(kāi)發(fā)版中集成了sql 2005 express,而在SQL 2005中又集成了vs2005 Express,,所以當(dāng)很多用戶(hù)同時(shí)安裝vs2005團(tuán)隊(duì)開(kāi)發(fā)?:?sql 2005企業(yè)版(downmoon)時(shí),就會(huì)出現(xiàn)數(shù)據(jù)庫(kù)連接失敗的case2012-10-10sqlserver中獲取當(dāng)前日期的午夜的時(shí)間值的實(shí)現(xiàn)方法
MS SQLServer,如何獲取當(dāng)前系統(tǒng)日期的午夜的時(shí)間值的方法,需要的朋友可以參考下。2011-09-09Win2008中安裝的MSSQL2005后無(wú)法訪(fǎng)問(wèn)的解決方法
最近筆者一直在使用Win2008系統(tǒng),不過(guò)發(fā)現(xiàn)一個(gè)很奇怪的問(wèn)題,那就是在該系統(tǒng)上安裝了SQL2005后,再在其他計(jì)算機(jī)訪(fǎng)問(wèn)該主機(jī)顯示不能訪(fǎng)問(wèn)2014-07-07SQL Server 2005 模板參數(shù)使用說(shuō)明
如果你用SQL Server 2005 Management Studio建立函數(shù)或存儲(chǔ)過(guò)程,你會(huì)注意到這些新窗口中都是模板。通常,你可以獲得一個(gè)散布著標(biāo)記的框架。2009-01-01SQL2005CLR函數(shù)擴(kuò)展-數(shù)據(jù)導(dǎo)出的實(shí)現(xiàn)詳解
本篇文章是對(duì)SQLServer中數(shù)據(jù)導(dǎo)出的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06SQL?Server中帶有OUTPUT子句的INSERT,DELETE,UPDATE應(yīng)用
這篇文章介紹了SQL?Server中帶有OUTPUT子句的INSERT,DELETE,UPDATE應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06簡(jiǎn)單有用的SQL腳本 (行列互轉(zhuǎn),查詢(xún)一個(gè)表內(nèi)相同紀(jì)錄等)
本文推薦的SQL腳本都是很實(shí)用的哦,學(xué)會(huì)了,對(duì)在工作中得心應(yīng)手,一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2010-04-04