Php 更复杂的排序方式(首先是alpha,然后将数字视为整数)

Php 更复杂的排序方式(首先是alpha,然后将数字视为整数),php,mysql,sql,database,sorting,Php,Mysql,Sql,Database,Sorting,所以我有一堆varchar,我需要以某种方式进行排序,首先是alpha,然后将下面的数字视为一个整数(即A2在A10之前)。这是主要的问题,然后我有一些类似于A1M的“子”字母。我不想仅仅为了排序而添加一个新列,所以我想看看一个更复杂的ORDERBY语句是否能够处理这样的事情 它们应该按如下方式分类: A1 A1M A2 A6 A6B A9 A10 A15 A16 AS10 但它目前的排序方式如下(标准排序方式): 如果第一个字符是后跟数字的字母,则可以执行以下操作: order by lef

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

它们应该按如下方式分类:

A1
A1M
A2
A6
A6B
A9
A10
A15
A16
AS10
但它目前的排序方式如下(标准排序方式):


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

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

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

开头的alpha部分是可变的(在1-4个字符之间),因此有像A1这样的,但也有ABCD123b@Bryant你应该更新你的问题,以显示这种情况,以及这将如何影响结果Corry@Barmar,但我不认为这是问题的答案。选择的答案说
我想这就是为什么很多事情都是按发布日期排序的。
接受的答案没有做到这一点,但其他一些答案做到了。其他答案依赖于数字的固定位置,我不知道数字部分将在哪里start@Barmar我不确定这是否是封闭式提问的方式。例如,我知道如果问题没有选择正确答案,即使我知道某些答案确实很好,我也不能称之为重复答案。因此,在另一篇文章中将重复的答案指向不正确的答案似乎并不正确。相反,您可以在您认为有助于操作的答案中使用
share
功能。它显示了如何找到列中第一个数字的位置,然后使用该位置将列拆分为前缀和后缀,以便您可以分别按它们排序。如果您可以修复数据,使其在单独的列中具有前缀和后缀,这将允许对它们进行索引。
order by left(col, 1),
         substr(col, 2) + 0,
         col