更复杂的ORDERBY(先使用alpha,然后将数字视为整数)


More Complex ORDER BY (alpha first, then treat number as a whole number)

所以我有一堆varchars,我需要以某种方式排序,首先是alpha,然后将下面的数字视为一个整数(即A2在A10之前)。这是主要的问题,然后我有一些A1M后面的"sub"字母。我不想仅仅为了排序而添加一个新列,所以我想看看更复杂的ORDERBY语句是否能够处理这样的事情。

它们应该这样排序:

A1
A1M
A2
A6
A6B
A9
A10
A15
A16
AS10

但它目前的排序是这样的(标准ORDERBY):

A1
A10
A15
A16
A1M
A2
A6
A6B
A9
AS10

如果第一个字符是一个字母后面跟着一个数字,您可以执行:

order by left(col, 1),
         substr(col, 2) + 0,
         col

第一把钥匙就是第一个字母。第二个是字母后面的数字。+ 0是一个不返回错误的隐式转换。最后一个键只是整个列。

相关文章: