按字母顺序排序MySQL结果,但最后使用数字

Kzq*_*qai 7 mysql sql-order-by alphabetical-sort

通常情况下,排序与分类到顶部,像符号做0*&.这是mysql排序的默认方式; 数字和符号然后AZ.然而,这使得经常最丑或最严重格式的结果浮到顶部(例如,结果@#$@34238 inch&amp).

所以我想做一个修改过的形式,首先是字母AZ,然后是特殊字符.

我将如何创建这种类型的排序?ORDER BY条款中的东西?

Mat*_*hew 7

基于此页面的google-cached链接:http://www.google.com/url? sa = t&source = web&cd = 3&ed = 0CCUQFjAC&url = http% 3A %% 2F%2Fblog.feedmarker.com%2F2006%2F02% 2F01 %2Fhow到DO-自然字母数字排序合的MySQL%2F&EI = Zg2_TZyKDaffiALjjqwo&USG = AFQjCNGS-rX7AmfrumXK8J7bVSj96bSSmQ

编辑:原始链接已死.这是另一个链接,它实际上解释了比第一个链接更好的事情:

http://matthewturland.com/2008/11/05/natural-ordering-in-mysql/

你可以试试这个

SELECT names FROM your_table ORDER BY names + 0 ASC
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 6

Select ...
From ...
Order By Case When Col Like '[0-9]%' Then 1 Else 0 End Asc
    , Col
Run Code Online (Sandbox Code Playgroud)

另一个解释特殊字符的解决方案:

Select ...
From ...
Order By Case When Col Like '[A-Z]%' Then 0 Else 1 End Asc
    , Col
Run Code Online (Sandbox Code Playgroud)

  • 这仅解决字符串的第一个字符.我假设OP希望将排序逻辑应用于整个字符串.例如,`aa`应排在`a1`和`a!`之上. (2认同)