更复杂的ORDER BY(alpha首先,然后将数字视为整数)

时间:2015-10-28 21:14:03

标签: php mysql sql database sorting

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

它们应该像这样排序:

A1
A1M
A2
A6
A6B
A9
A10
A15
A16
AS10

但它目前的排序方式如此(标准ORDER BY):

A1
A10
A15
A16
A1M
A2
A6
A6B
A9
AS10

1 个答案:

答案 0 :(得分:0)

如果第一个字符是字母后跟数字,则可以执行以下操作:

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

第一个键是第一个字母。第二个是信后面的数字。 + 0是隐式转换,不会返回错误。最后一个关键是整个专栏。