MySQL ORDER BY删除非数字字符

时间:2016-11-20 13:05:24

标签: mysql sql-order-by

我有一个旧的数据库,其中插入了一些值,如下所示:

blablabla2008
blablabla2010
blablabla2011

...其他一些(最新的)值作为数字插入:

2013
2014

有没有办法在sql查询中对此进行排序?

1 个答案:

答案 0 :(得分:2)

如果你关心的数字是最后四个字符(如你的例子中所示),那么这很容易:

order by right(col, 4)

否则,问题就更难了,因为MySQL没有提供查找或使用字符类的方法。一种方法是这样的:

order by (case when substring(col, -2, 1) not between '0' and '9'
               then right(col, 1) + 0
               when substring(col, -3, 1) not between '0' and '9'
               then right(col, 2) + 0
               when substring(col, -4, 1) not between '0' and '9'
               then right(col, 3) + 0
               when substring(col, -5, 1) not between '0' and '9'
               then right(col, 4) + 0
               . . .
          end)

即,检查每个位置是否为非数字字符。