mysql order by 排序 varchar類型字段

    在做業務的時候遇到查詢的字段需要對varchar的字段進行排序,因爲這個字段是以前就已經生成的,但是所有的值都是數字,排序的結果和預期的數值大小排序不太一樣。

    原因在於對於字符串的排序原理是按位(每個字符)進行比較的,並且是按照每個字符的ASCII碼值,包括數字(數字的ASCII值等於該數字的值)。

    那麼如果這個字段全爲數字了,排序的結果就會與字段爲Int型的排序結果不一樣。

CREATE TABLE order_test (
	id INT (11) PRIMARY KEY,
	number VARCHAR (100)
);

   以一些測試值爲例:12,11,10,1,21,22,5,9,100:

    執行排序語句:

SELECT * FROM order_test a ORDER BY a.number;

    排序後的結果爲:1,10,100,11,12,21,22,5,9

   解決方法:

     可以直接將對應的字段轉換爲int類型:

SELECT * FROM order_test a ORDER BY a.number+0;

兩個語句執行結果分別爲: 

                  

需要注意的是:這樣的處理方式只對數字有效,如果其中還包含字符,其結果不會影響數字的排序,但是也不會按照原有的按位的方式排序。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章