當(dāng)前位置:博客首頁>>PHP >> 閱讀正文

mysql對(duì)text字段進(jìn)行排序

作者: 鄭曉 分類: PHP 發(fā)布于: 2014-04-20 21:54 瀏覽:7,867 沒有評(píng)論


mysql中,默認(rèn)對(duì)text字段進(jìn)行排序的話是按text字段的首字符進(jìn)行排序,即假如某表結(jié)構(gòu)如下:
mysql_text_cast_orderby1
如果默認(rèn)對(duì)此text類型的字段進(jìn)行排序的話,如select * from table order by f1 asc?!〗Y(jié)果可能如下圖這樣:
mysql_text_cast_orderby2

發(fā)現(xiàn)mysql對(duì)text類型的字段排序時(shí)只對(duì)首字符進(jìn)行排序,并不是我們所預(yù)期的結(jié)果(按數(shù)字大小排序)。

所以如果想要解決這個(gè)問題,我們可以使用mysql的一個(gè)內(nèi)置函數(shù):cast,CAST ( expression AS data_type )。cast是一個(gè)顯式的類型轉(zhuǎn)換函數(shù),將第一個(gè)參數(shù)轉(zhuǎn)換成第二個(gè)參數(shù)所設(shè)置的類型,第一個(gè)參數(shù)可以是字段,或其它符合語法的表達(dá)式,第二個(gè)參數(shù)是目標(biāo)類型,可以是如下幾種類型:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

所以,對(duì)于我們要排序的這個(gè)字段來說,我們需要把這個(gè)字段轉(zhuǎn)換為整型,如signed。對(duì)應(yīng)的mysql語句可以是這樣:select * from table order by cast(f1 as signed) asc; 或者也可以這樣:select cast(f1 as signed) as f2 order by f2 asc。
效果如下:
mysql_text_cast_orderby3
如此,就達(dá)到了我們的目標(biāo)。

? ? ? ?

本文采用知識(shí)共享署名-非商業(yè)性使用 3.0 中國(guó)大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。

本文永久鏈接: http://yjfs.org.cn/mysql-cast-text-pai-xu.html

發(fā)表評(píng)論

change vcode