Сортировка буквенно-цифровой с изюминкой - PullRequest
0 голосов
/ 11 июня 2019

Я хочу отсортировать поле буквенно-цифрово в базе данных.Оказывается, хитрее, чем я думал.Это просто пример значений, содержание может варьироваться, но я надеюсь, что этого достаточно, чтобы понять идею.

Я хочу отсортировать этот список:

11
01
1
1A
01B
20a
01a
20
1b
2b
02a

Вот так:

1
01
1A
01a
1b
01B
02a
2b
11
20
20a

Обратите внимание, что относительный порядок эквивалентных чисел с ведущими нулями и без них не важен, это может быть 1 01 или 01 1.

Я пробовал CAST(field AS UNSIGNED), но это не работает.Идеи?

1 Ответ

2 голосов
/ 11 июня 2019

Если вы используете MySQL 8.0 или выше, вы можете использовать REGEXP_SUBSTR(colname, '[a-z]+$') для получения буквенного суффикса и CAST(colname AS UNSIGNED) для получения числового префикса. Тогда вы можете сортировать по этим.

SELECT code
FROM yourTable
ORDER BY CAST(code AS UNSIGNED), REGEXP_SUBSTR(code, '[a-z]+$')

См. Что эквивалентно REGEXP_SUBSTR в mysql? о том, как получить аналогичную функциональность в более ранних версиях MySQL.

Другая возможность:

ORDER BY CAST(code AS UNSIGNED), TRIM(LEADING '0' FROM code)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...