2016-01-20 61 views
1

我怎麼排序的列(VARCHAR)是這樣的:MySQL的排序VARCHAR

[CSGO] Bot #1 
[CSGO] Bot #2 
[CSGO] Bot #3 
... 
[CSGO] Bot #10 

我的查詢結果:

[CSGO] Bot #2 
[CSGO] Bot #23 
[CSGO] Bot #5 
[CSGO] Bot #6 

查詢:

SELECT bot_id, name, username FROM bots ORDER BY ABS(REPLACE(name, '[CSGO] #', '')) ASC 

無ABS()和REPLACE()給出了基本相同的結果。

+0

看起來你的參數在替換中缺少'Bot'。它看起來'REPLACE'函數返回一個未修改的'name'值。 – spencer7593

回答

3

一個簡單的方法來做到這一點假設前綴的長度相同:

order by length(name), name 

如果你只是想用#後的部分去:

order by substring_index(name, '#', -1) + 0 
+0

謝謝!通過substring_index(name,'#',-1)+ 0'進行排序 – Fredrik

1
SELECT bot_id, name, username 
FROM bots 
ORDER BY substring_index(name, '#', 1), substring_index(name, '#', -1) + 0 

如果您列名始終以'[CSGO] Bot#'開始,然後執行此操作:

SELECT bot_id, name, username 
FROM bots 
ORDER BY substr(name, 13) + 0 
0

ORDER BY ABS(REPLACE(name, '[CSGO] Bot #', ''))*1 ASC