La gente usa diferentes trucos para hacer esto. Busqué en Google y descubrí algunos resultados, cada uno sigue diferentes trucos. Échales un vistazo:
- Ordenación alfanumérica en MySQL
- Clasificación natural en MySQL
- Ordenación de valores numéricos valores mezclados con valores alfanuméricos
- clasificación natural mySQL
- Ordenación natural en MySQL
Editar:
Acabo de agregar el código de cada enlace para futuros visitantes.
Ordenación alfanumérica en MySQL
Entrada dada
1A 1a 10A 9B 21C 1C 1D
Resultado esperado
1A 1C 1D 1a 9B 10A 21C
Consulta
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
Clasificación natural en MySQL
Entrada dada
Table: sorting_test -------------------------- ------------- | alphanumeric VARCHAR(75) | integer INT | -------------------------- ------------- | test1 | 1 | | test12 | 2 | | test13 | 3 | | test2 | 4 | | test3 | 5 | -------------------------- -------------
Resultado esperado
-------------------------- -------------
| alphanumeric VARCHAR(75) | integer INT |
-------------------------- -------------
| test1 | 1 |
| test2 | 4 |
| test3 | 5 |
| test12 | 2 |
| test13 | 3 |
-------------------------- -------------
Consulta
SELECT alphanumeric, integer
FROM sorting_test
ORDER BY LENGTH(alphanumeric), alphanumeric
Ordenación de valores numéricos mezclados con valores alfanuméricos
Entrada dada
2a, 12, 5b, 5a, 10, 11, 1, 4b
Resultado esperado
1, 2a, 4b, 5a, 5b, 10, 11, 12
Consulta
SELECT version
FROM version_sorting
ORDER BY CAST(version AS UNSIGNED), version;
Espero que esto ayude