如何对“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;
有人愿意提供更好的答案或指出正确的方向来清理我的问题吗?
提前致谢,
不确定这是否符合您对 "better" 或 "cleaned up" 的定义:
ORDER BY LEFT(MyString,1),SUBSTRING(MyString,2,1),SUBSTRING(MyString,3,1)
尝试这样的事情:
ORDER BY LEN(myValue),myValue
这将排序 1 个字符,然后是 2 个字符,依此类推...
参考这个问题:
我接受了一个使用 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;
有人愿意提供更好的答案或指出正确的方向来清理我的问题吗?
提前致谢,
不确定这是否符合您对 "better" 或 "cleaned up" 的定义:
ORDER BY LEFT(MyString,1),SUBSTRING(MyString,2,1),SUBSTRING(MyString,3,1)
尝试这样的事情:
ORDER BY LEN(myValue),myValue
这将排序 1 个字符,然后是 2 个字符,依此类推...