簡體   English   中英

如何自然排序“XY”字符串數據,先按 X 再按 Y?

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

db-fiddle 上的演示

如果值可以分別超過 2 或 5 位數字,只需將第二個參數更改為LPAD即可。

我會這樣做:

order by substring_index(col, '-', 1) desc,
         substring_index(col, '-', -1) + 0 desc

這按連字符之前的部分作為字符串進行排序。 並將連字符后的部分轉換為數字以進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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