我有VARCHAR行的值如:「1,11,2,6,2A,10,6B」 如何選擇它們排序如:1,2,2A,6,6B,10,11 ?mysql varchar排序
嘗試了簡單的SQL查詢,但這沒有奏效。
SELECT * FROM clients ORDER BY id
我有VARCHAR行的值如:「1,11,2,6,2A,10,6B」 如何選擇它們排序如:1,2,2A,6,6B,10,11 ?mysql varchar排序
嘗試了簡單的SQL查詢,但這沒有奏效。
SELECT * FROM clients ORDER BY id
你在找什麼是CAST
。
CAST(expr AS type)
您的SQL查詢應該是這樣的:
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id
I'確保MySQL可以按照詞法排序,這是他似乎想要的。 – bdares
完全按照我的需要工作:) – Dikobraz
@bdares他也想要十進制排序,如果它只是詞法上的,'1'後面會跟着'11'而不是'2' – technology
您可以使用CONVERT
。
這將首先由數字,然後排序的字母(否則你不能保證有1個,1A,1B等)
SELECT id FROM clients ORDER BY CONVERT(id, UNSIGNED), id
此外這在MySQL中工作:'SELECT ID FROM clients ORDER BY id * 1,id' –
@Imre L:很酷,我不知道! – nico
從以前的答案借款,鑄造或轉換列到ORDER
子句中的數字表達式是數字排序字符字段中值的常用解決方案。
部分解決
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL)
但是,這個方案是最常見的對嚴格的數值來實現。由於你的值是一個數字和一個字母的混合體,所以這個解決方案是不夠的。如果您的值前導小數部分相同,例如2
,2A
和2B
,則它們可以按任意順序顯示。
完整的解決方案
所以,一旦值數值排序,應進一步與標準(字典)順序進行排序:
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id
怎麼就不行?因爲你發佈的樣本數據,我希望它應該。 (當然,假設'id'是你想要排序的行的名稱。) – bdares
@bdares:nope,它會做'1,10,11,2,2,6,6B' – nico