SQL根據字串中的數字排序
阿新 • • 發佈:2019-01-28
USE [Test] GO SELECT ProcessName ,INDEX1 ,INDEX2 ,INDEX3 ,CAST(SUBSTRING(ProcessName,0,INDEX1) AS INT)*10000 +CAST(SUBSTRING(ProcessName,INDEX1+1,INDEX2-INDEX1-1) AS INT)*100 +CAST(SUBSTRING(ProcessName,INDEX2+1,INDEX3-INDEX2-1) AS INT) AS Sort FROM ( SELECT ProcessName ,CHARINDEX('.',ProcessName) AS INDEX1 ,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1) AS INDEX2 ,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1)+1) AS INDEX3 FROM ProcessPublish ) AS table1 ORDER BY Sort ASC
結果如下圖:
優化程式碼:字串中沒有三個.,排序序號設定為0
USE [Test] GO SELECT ProcessName ,INDEX1 ,INDEX2 ,INDEX3 ,CASE WHEN INDEX1>0 AND INDEX2>0 AND INDEX3>0 THEN--判斷是否字元中包含3個. CAST(SUBSTRING(ProcessName,0,INDEX1) AS INT)*10000 +CAST(SUBSTRING(ProcessName,INDEX1+1,INDEX2-INDEX1-1) AS INT)*100 +CAST(SUBSTRING(ProcessName,INDEX2+1,INDEX3-INDEX2-1) AS INT) ELSE 0 END AS Sort FROM ( SELECT ProcessName ,CHARINDEX('.',ProcessName) AS INDEX1 ,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1) AS INDEX2 ,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1)+1) AS INDEX3 FROM ProcessPublish ) AS table1 ORDER BY Sort ASC