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字串
- 如何拆出字串中的數值並排序字串排序
- SQL Server 中將字串按數字排序SQLServer字串排序
- mysql 字串型別的數值欄位按照數值的大小進行排序MySql字串型別排序
- T-SQL技巧收集——拆分字串SQL字串
- php拆分數字字串方法PHP字串
- MySQL字串中抽取數值的方法MySql字串
- 【NULLS】Oracle對SQL排序後NULL值位置的“特殊關照”NullOracleSQL排序
- C#按字串中的數字排序問題C#字串排序
- 如何從字串文字中拆解出多個數值並計算字串
- mysql相同數值排序MySql排序
- java——split的用法(字串拆分)Java字串
- 【SQL】SQL解惑-如何從字串中獲取IP地址SQL字串
- JZ-053-表示數值的字串字串
- 劍指Offer 表示數值的字串字串
- 拆分合並字串(轉)字串
- 轉貼_字串分隔_拆分字串
- 在oracle中將一行字串拆分成多行Oracle字串
- 【Kmp求字串字首在字串出現的次數】51nod 1277 字串中的最大值KMP字串
- SQL解惑-如何從字串中獲取IP地址SQL字串
- PostgreSQL排序把null值排在後面SQL排序Null
- sort按照數值大小排序排序
- 對Boost庫中的數值到字串的轉換的改進 (轉)字串
- 《劍指offer》:[54]表示數值的字串字串
- SQL中的空值NULLSQLNull
- SQL server中的NULL值SQLServerNull
- python拆分中英文混合字串 - 按中文拆分Python字串
- java 拆分與合併字串Java字串
- CoffeeScript攻略3.7:拆分字串字串
- SQL字串的數字部分遞增SQL字串
- Python中如何進行字串計數?Python字串
- 排序後扣減每行的數量排序
- Android筆記:獲取url或uri字串中的引數值Android筆記字串
- js數值排序中冒泡演算法的4種簡單實現JS排序演算法
- 拆分含有多種分隔符的字串字串
- 如何獲取字串中相同字元出現的次數字串字元
- 排序字串排序字串
- 劍指Offer系列之「表示數值的字串」字串