2019-12-11對varchar類型排序問題的解決 在mysql預設order by 只對數字與日期類型可以排序,但對於varchar字元型類型排序好像沒有用了,下麵我來給各位同學介紹varchar類型排序問題如何解決。 現象描述: select * from resultgroup where ...
2019-12-11對varchar類型排序問題的解決
在mysql預設order by 只對數字與日期類型可以排序,但對於varchar字元型類型排序好像沒有用了,下麵我來給各位同學介紹varchar類型排序問題如何解決。
現象描述:
select * from resultgroup where upUser = 'kkk' order by patientId desc
為什麼會出現這種現象呢?就是因為 patientId 是varchar類型的 而order by 排序只針對數字 跟日期排序的。所以會出現上述現象。
解決辦法:
1.把varchar類型欄位加上0變成int類型就ok。
select * from resultgroup where upUser = 'kkk' order by patientId+0 desc
2.用mysql自帶的方法 把varchar強轉。CAST/CONVERT
mysql為我們提供了兩個類型轉換函數:CAST和CONVERT,現成的東西我們怎能放過?
CAST() 和CONVERT() 函數可用來獲取一個類型的值,並產生另一個類型的值。
這個類型 可以是以下值其中的 一個:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
所以我們可以用CAST解決問題:
select * from resultgroup where upUser = 'kkk' order by cast(patientId as signed ) desc
也可以使用CONVERT來搞定此問題:
select * from resultgroup where upUser = 'kkk' order by convert(patientId , signed ) desc
3.如果不是電話而是漢字怎麼辦,漢字排序我們只要進行簡單轉換即可排序了
在mysql中使用order by對存儲了中文信息的欄位,預設出來的結果並不是按漢字拼音的順序來排序,要想按漢字的拼音來排序,需要把資料庫的字元集設置為UTF8,然後在order by 時候強制把該欄位信息轉換成GBK,這樣出來的結果就是按拼音順序排序的。例如:
SELECT * FROM table_name ORDER BY CONVERT(column_name USING gbk);
結論是:查詢的時候,通過convert函數,把查詢出來的數據使用的字元集gb2312編碼就可以了,然後使用convert之後的中文排序。但是如果真的去把表中欄位的字元集改成gb2312,又會涉及到很多編碼的問題,頁面傳值啊,從資料庫中存取啊,很麻煩。只要在查詢的時候,指定一下字元集,並不是真的把物理欄位改成gb2312,很簡單。
到這裡對varchar類型排序問題就解決了。。。