1. 程式人生 > >MYSQL數據庫字母數字混合字段排序問題

MYSQL數據庫字母數字混合字段排序問題

一是 lec 而不是 例如 column mysql body 序列 感覺

對MySQL數據表裏的一個字符型字段排序,其內容格式為一位字母+順序數字。數字沒有前導零,長度不固定。
這種含字母的數字序列,排序出來的結果和我們想要的結果是不一樣的,因為它不是純數字,只能按字符規則排。
結果是A1,A10,A11,A12。。。。A19,A2,A20,A21。。。。
而不是我們通常感覺中的A1,A2,A3,。。。。。A10,A11,這樣的結果。
想要得到正確的排序有兩個辦法。
一是改變字段內容結構,在數字前加上零,讓所有的字段值擁有相同的長度。
二是不改變字段內容,在排序的SQL語句上想辦法。


order by mid(column,2,10) +1


mid()第一個參數是字串內容,可以是字段名。第二個參數是起始字符的位置,我這裏需要從第二個字符開始。第三個參數是需要取得的長度,要選一個可以包含所有字段內容長度的值,寧大勿小。

但這樣取出來的還只是“數字內容的字符串”,對它排序仍然使用字符規則,不會得到我們想要的結果。
這時需要給這個結果再加上一個數值,讓MySQL對它進行一次算術運算,然後得到的就是一個整型值,這時再排序就是數字順序的結果了。
例如:
SELECT * FROM equipmentmes ORDER BY MID(eqid,2,10) +1

MYSQL數據庫字母數字混合字段排序問題