Блог

MySQL: буквенно-цифровая сортировка

Есть задача, нужно выполнить правильную сортировку. К примеру как вот этот набор: 1A 1A 10A 9B 21C 1D 1С или желаемый результат 1A 1C 1D 1а 9В 10A 21C

Мы можем использовать простую сортировку, но результат не всегда будет тот который мы ожидаем 1A, 1B, 1C правильно. Чтобы решить эту проблему, мы сначала преобразовать эту колонку в двоичную и сортировки двоичных сочетании с tbl_column.

После выполнения некоторых “ударов головой об стол” …используя ту же логику что и всегда но в добавок дополнительно используем BIN / CAST функции.

В результате получаем вот такие запросы:

Bin way:

SELECT
tbl_column, BIN(tbl_column) AS binray_not_needed_column
FROM db_table
ORDER BY binray_not_needed_column ASC , tbl_column ASC

Cast way:

SELECT
tbl_column, CAST(tbl_column as SIGNED) AS casted_column
FROM db_table
ORDER BY casted_column ASC , tbl_column ASC