SQL 如何拆分字串中的數值後排序
通常情形下,一列資料都是整體參與排序,但如果當欄位是由字母跟序號組合在一起的複合列,比如現有表TData中列名為NameSerial的一組資料:
Mike105
Rose11
Rose1
Rose5
Mike6
現在需要先按名字排序,再按序號排序。比如Mike6要排在Mike105前面,期望的結果如下:
Mike6
Mike105
Rose1
Rose5
Rose11
由於SQL不支援對欄位的單詞拆分,所以只能寫儲存過程拆分資料,然後使用SQL查詢來排序。以SQL Server2012為例,自定義資料拆分標量值函式dbo.words如下:
CREATE FUNCTION dbo.words(@word VARCHAR(100) , @part INT) RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @sub VARCHAR(100)
DECLARE @tmp VARCHAR(10)
DECLARE @numIndex INT
DECLARE @len INT
DECLARE @i INT
SET @i = 1
SET @len = Len(@word)
WHILE @i<=@len
BEGIN
SET @tmp = Substring(@word,@i,1)
IF(ISNUMERIC(@tmp)=1)
BEGIN
SET @numIndex = @i
BREAK
END
SET @i=@i+1
END
IF(@part=1)
BEGIN
SET @sub=Substring(@word,1,@numIndex-1)
END
ELSE
BEGIN
SET @sub=Substring(@word,@numIndex,@len-@numIndex+1)
END
RETURN @sub
END
其中引數@part用於指示當前要拆分的部分,1為名字部分,2為序號部分。
需要注意的是,數值部分拆分出來後,要轉換為整數後再排序,否則仍然跟整體排序沒區別。之後的排序,只需要如下SQL即可:
SELECT * FROM TData ORDER BY dbo.words(NameSerial,1),cast(dbo.words(NameSerial,2) as int)
本例雖然透過自定義資料庫函式的方式實現了拆分函式,但並不通用,且不能移植到其他資料庫。
這種情況,如果有集算器就方便多了,用SPL實現只要一句話:
connect("db").query("SELECT * FROM TData").sort(NameSerial.words@w())
集算器SPL是解決SQL難題的專業指令碼語言,它語法簡單,符合自然思維,天然分步、層次清晰的程式導向計算語言。它採用與資料庫無關的統一語法,編寫的演算法可在資料庫間無縫遷移。它是桌面級計算工具,即裝即用,配置簡單,除錯功能完善,可設定斷點、單步執行,每步執行結果都可檢視。請參閱
SPL也能很方便地嵌入到JAVA應用,可參考:
具體使用方法可參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2698390/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何拆出字串中的數值並排序字串排序
- SQL Server 中將字串按數字排序SQLServer字串排序
- mysql 字串型別的數值欄位按照數值的大小進行排序MySql字串型別排序
- SqlServer中字串拆分仿造split功能SQLServer字串
- 【SQL】SQL解惑-如何從字串中獲取IP地址SQL字串
- 如何從字串文字中拆解出多個數值並計算字串
- java——split的用法(字串拆分)Java字串
- mysql相同數值排序MySql排序
- JZ-053-表示數值的字串字串
- 劍指Offer 表示數值的字串字串
- 在oracle中將一行字串拆分成多行Oracle字串
- PostgreSQL排序把null值排在後面SQL排序Null
- Python中如何進行字串計數?Python字串
- SQL 查詢中的 NULL 值SQLNull
- 排序後扣減每行的數量排序
- 字串-簡單字串排序字串排序
- 劍指Offer系列之「表示數值的字串」字串
- 將數值轉換為字串的函式字串函式
- Python中如何將字串變成數字?Python字串
- js數值排序中冒泡演算法的4種簡單實現JS排序演算法
- JavaScript 字串轉換數值型別JavaScript字串型別
- 在SQL Server 2008中的SP上使用表型別值引數MHSQLServer型別
- 整數拆分
- 如何在MonogoDB中檢視配置的引數值MonoGo
- SQL中的常用的字串處理函式大全SQL字串函式
- SQL Server 如何合併組內字串SQLServer字串
- linux 中如何判斷變數是否為數值Linux變數
- mysql拆分字串做條件查詢MySql字串
- 用Java拆分字串示例和技巧 -DreamixJava字串
- SQL 如何計算每個分組的中位數SQL
- python中如何取數字的後幾位Python
- js字串排序方法JS字串排序
- MySQL 對字串排序MySql字串排序
- JAVA——拆分位數Java
- 獲取母字串中某個子字串的某個確定的index值字串Index
- js將陣列中的字串執行字母表排序JS陣列字串排序
- python如何去掉字串中的空格Python字串
- Oracle以逗號分隔的字串拆分為多行資料Oracle字串