我有以下MySQL:

SELECT scott, title FROM stampitemdetails WHERE scott REGEXP '^RW[0-9]+$' ORDER BY CAST(scott AS UNSIGNED), scott;

问题是,此查询将按如下顺序返回我的结果:
RW1
RW10
RW11
RW2

当他们应该是这样的时候:
RW1
RW2
RW10
RW11

当值以字符开头以数字结尾时,如何进行自然排序?
如果RW的长度可以波动…这意味着它可以是S,或REN,或数字前面的一些长度未知的字符?记住这一点。
顺便说一下,我在查询中有regex,因为在我的php代码中RW可以替换为其他字符。

最佳答案

你应该提取数字部分

  SELECT scott, title
  FROM stampitemdetails
  WHERE scott REGEXP '^RW[0-9]+$'
  ORDER BY substr(scott, 1,2),  CAST(substr(scott, 3, 100)  AS UNSIGNED);

10-05 20:28