簡體   English   中英

如何對“A”,“B”,“AA”,“AB”和“AAA”等版本號進行排序?

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

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