[英]How can I sort A1,A2,A3,B1,B2,B3,…,AA1,AA2,AA3 in MySQL?
[英]How can I sort version numbers such as ‘A’, ‘B’, ‘AA’, ‘AB’ and ‘AAA’?
參考此問題: 如何僅獲取最新的發票編號
我接受了使用MAX函數的答案,但Robert McKee指出將導致排序值,例如:
‘A’ ‘AA’ ‘AAA’ ‘AB’ ‘B’
當我需要的是:
‘A’ ‘B’ ‘AA’ ‘AB’ ‘AAA’
我正試圖找到一種方法來查找最新版本的發票。 引用問題中接受的答案將起到一定作用。 它確實滿足了我的問題......但現在一個新問題值得回答自己的問題,而不是讓我回去修改我原來的問題。 所以…
我唯一需要處理的是發票編號本身。 發票編號的格式為##### XXX,其中#####是實際的發票編號,XXX是版本編號。 XXX可以是從'A'到'ZZZ'的任何地方。
這是我嘗試找到一個合理的工作(一個SQL測試用例):
DECLARE @TempTable TABLE (MyNumber int, MyString varchar(15));
INSERT @TempTable
VALUES (100, 'A'), (100, 'AAZ'), (100, 'B'), (100, 'AZ'), (100, 'C'), (100, 'Z'), (100, 'AA'), (100, 'AB');
SELECT TOP 1
RTRIM(CAST(MyNumber AS NVARCHAR(15)) + MyString) AS InvoiceNumber
FROM @TempTable
ORDER BY RIGHT(LEFT(MyString + SPACE(2), 3), 1) DESC, RIGHT(LEFT(MyString + SPACE(2), 2), 1) DESC, LEFT(MyString, 1) DESC;
有人願意提供更好的答案或指出我正確的方向來清理我的?
提前致謝,
嘗試這樣的事情:
ORDER BY LEN(myValue),myValue
這將訂購1個字符,然后是2個字符等...
不確定這是否符合您對“更好”或“清理”的定義:
ORDER BY LEFT(MyString,1),SUBSTRING(MyString,2,1),SUBSTRING(MyString,3,1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.