簡體   English   中英

為什么mysql按字母數字排序不起作用

[英]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

DB Fiddle 上的演示

| 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM