15

我在 mysql 排序中寻找一些调整,我通常从表中选择记录,然后按 Name(varchar) ASC 对记录进行排序,但数字总是排在第一位

这是我的问题的一些例子(注意。mysql首先用0-9对记录进行排序

SELECT name FROM list ORDER BY name ASC
record returned:
1 star
2 star
9 slice
Ape
Age
Beg
Bell
Fish
Zoo

我想要的是字母顺序先来,然后是数字

期望的输出

Ape
Age
Beg
Bell
Fish
Zoo
1 star
2 star
9 slice
4

5 回答 5

34

使用以下ORDER BY子句:

ORDER BY IF(name RLIKE '^[a-z]', 1, 2), name
于 2013-07-02T05:52:32.487 回答
9

参考这个

SELECT name FROM list ORDER BY name * 1 ASC

已编辑

SELECT name FROM list ORDER BY name * 1, name ASC
于 2013-07-02T05:55:18.467 回答
1

你可以尝试这样的事情:

SELECT 
    name 
FROM 
    list 
ORDER BY 
    IF(name REGEXP '^[0-9]', CONCAT('zz',name),name) ASC

因此,如果您的名字以数字开头,则在开头连接“zz”(这样它将是最后一个)

于 2013-07-02T05:52:30.313 回答
0

这就是在 Rails 中使用 POSTGRESQL DB 对我有用的方法

.order(Arel.sql("SUBSTRING(LOWER(name), '^[A-Za-z].*'), SUBSTRING(LOWER(name), '^[0-9]+')::FLOAT"))  

                       
于 2021-09-02T12:11:21.227 回答
-2

试试这个..

得到你的答案很简单

SELECT name  from list ORDER BY (name +0) ASC ,name ASC
于 2013-07-02T05:59:05.260 回答