【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)
執行結果:
留言
張貼留言