2016-11-20 8 views
1

У меня есть старые базы данных, где некоторые значения вставляются так:MySQL ORDER BY удалить нечисловые символы

blablabla2008 
blablabla2010 
blablabla2011 

... An некоторые другие (новые) значения вставляются как числовые:

2013 
2014 

Есть ли способ отсортировать это в sql-запросе?

ответ

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) 

То есть, проверяйте каждую позицию для символа без цифр.

Смежные вопросы