在mysql中text字段類型是一個超長的字段了,我們幾乎不會使用它來進行數據排序了,但今天下午碰到一個必須使用text字段排序的項目,最終還是解決了下面分享解決辦法。
mysql中,默認對text字段進行排序的話是按text字段的首字符進行排序,即假如某表結構如下:
如果默認對此text類型的字段進行排序的話,如select * from table order by f1 asc。 結果可能如下圖這樣:
發現mysql對text類型的字段排序時只對首字符進行排序,並不是我們所預期的結果(按數字大小排序)。
所以如果想要解決這個問題,我們可以使用mysql的一個內置函數:cast,CAST ( expression AS data_type )。cast是一個顯式的類型轉換函數,將第一個參數轉換成第二個參數所設置的類型,第一個參數可以是字段,或其它符合語法的表達式,第二個參數是目標類型,可以是如下幾種類型:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
所以,對於我們要排序的這個字段來說,我們需要把這個字段轉換為整型,如signed。對應的mysql語句可以是這樣:
代碼如下
復制代碼
select * from table order by cast(f1 as signed) asc;
或者也可以這樣:
代碼如下
復制代碼
select cast(f1 as signed) as f2 order by f2 asc
。
效果如下:
如此,就達到了我們的目標。