[英]How to natural sort “X-Y” string data, first by X and then by Y?
鑒於此數據:
W18-40461
W19-1040
W20-4617
W20-100
我已經嘗試了幾種常見的 mysql 自然排序方法,但它們不會以自然降序方式對它們進行排序,例如:
W20-4617
W20-100
W19-1040
W18-40461
例如:
select theID
from Table
where theID
order by lpad(theID, 9, 0) desc
假設-
兩側的部分分別限制為 2 位和 5 位,您可以使用SUBSTR
(和LOCATE
來查找兩個數字之間的-
)提取兩個數值,然后使用LPAD
每個值到 2 位和 5 位數字以允許它們按數字排序:
SELECT *
FROM data
ORDER BY LPAD(SUBSTR(id, 2, LOCATE('-', id) - 2), 2, '0') DESC,
LPAD(SUBSTR(id, LOCATE('-', id) + 1), 5, '0') DESC
輸出(對於我的擴展樣本):
id
W20-12457
W20-4617
W20-100
W19-1040
W18-40461
W4-2017
如果值可以分別超過 2 或 5 位數字,只需將第二個參數更改為LPAD
即可。
我會這樣做:
order by substring_index(col, '-', 1) desc,
substring_index(col, '-', -1) + 0 desc
這按連字符之前的部分作為字符串進行排序。 並將連字符后的部分轉換為數字以進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.