15

私はmysqlの順序付けで微調整を探しています。通常、テーブルからレコードを選択し、名前(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 に答える
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

これは、POSTGRESQL DBを使用したRailsで私にとってうまくいったことです

.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 に答える