sql >> Base de Datos >  >> RDS >> Mysql

MySQL 'Ordenar por':clasificación alfanumérica correctamente

La gente usa diferentes trucos para hacer esto. Busqué en Google y descubrí algunos resultados, cada uno sigue diferentes trucos. Échales un vistazo:

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