【SQL】小數點做排序

在工作上同仁遇到一個關於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)

執行結果:

留言

這個網誌中的熱門文章

【ASP】日期轉換(西元<-->民國)

【VB】使用NPOI元件來匯出Excel--DataTableToExcel

【SQL】符號切割字串變成多欄