在工作上同仁遇到一個關於SQL排序問題,資料是英文+數字〔有小數〕,該如何做排序? 若用文字型態排序,所得到的結果並非是想要的。 假設欲排序資料 A1.1、A1.2、A1.3…A2.1…A2.10等 觀念作法: 1.首先將英文部份抽離。 【 假設欄位名稱Code_Desc1,substring(Code_Desc1,2,LEN(Code_Desc1)) => S_ID 】 2.接著比對小數點前面數字。 【 cast(SUBSTRING(S_ID,1,CHARINDEX('.',S_ID,1)-1) as money) 】 3.最後比對小數點後面數字。 【 cast(SUBSTRING(S_ID,CHARINDEX('.',S_ID,1)+1,LEN(S_ID)) as money) 】 語法: Select 欄位名稱 from Table order by 小數點前面數字, 小數點後面數字 語法(參考): select substring(Code_Desc1,2,LEN(Code_Desc1)) as SID, Code_Desc1, Code_Desc2 FROM System_Code Where UpLevelID in('A001', 'A002','B003') order by cast(SUBSTRING(substring(Code_Desc1,2,LEN(Code_Desc1)),1,CHARINDEX('.',substring(Code_Desc1,2,LEN(Code_Desc1)),1)-1) as money), cast(SUBSTRING(substring(Code_Desc1,2,LEN(Code_Desc1)),CHARINDEX('.',substring(Code_Desc1,2,LEN(Code_Desc1)),1)+1,LEN(substring(Code_Desc1,2,LEN(Code_Desc1)))) as money) 執行結果: