[英]Why mysql order by alphanumeric not working
我面臨着 MySQL 查詢的問題。 問題是我有一個名為“成員”的表和一個“區域”列。 在“區域”列中,有一些字母數字值,例如
1
2
Street # 2
5
78
Street # 1A
Street # 1
Street # 1C
Street # 1B
3
現在我想要什么? 我想這樣排序
1
2
3
5
78
Street # 1
Street # 1A
Street # 1B
Street # 1C
Street # 2
我幾乎嘗試了所有代碼,但沒有滿足我的要求。 最后一個代碼很好,但不符合我的要求。 目前,我有這個代碼:
SELECT DISTINCT(area) FROM members ORDER BY LENGTH(area), area ASC
我想清除該區域的一件事是其中包含重復值。
如果有人幫助我,我會很感激。
提前致謝
提取字符串的第一部分,如果它是數字,則對其進行排序:
select t.*
from t
order by (area regexp '^[0-9]') desc, -- numbers first
substring_index(area, ' ', 1) + 0, -- by number
area asc -- rest alphabetically
請注意,這處理了初始數字以0
開頭的尷尬情況。
根據您希望字符串的排序方式,您可能仍希望以len(area), area
作為最后兩個按鍵order by
結尾。
這是一個 db<>fiddle。
這應該適用於您的示例數據:
SELECT DISTINCT area
FROM members
ORDER BY (area + 0 > 0 or area = '0') desc, area + 0, area
| area | | :---------- | | 1 | | 2 | | 3 | | 5 | | 78 | | Street # 1 | | Street # 1A | | Street # 1B | | Street # 1C | | Street # 2 |
還有一個查詢:
SELECT DISTINCT(area)
FROM members
ORDER BY
area+0=0 ASC, -- get numbers first
area+0 ASC, -- order numbers
area ASC; -- order strings
現場小提琴SQLize.online
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.