Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL 'Order By' - classificando alfanumérico corretamente


As pessoas usam truques diferentes para fazer isso. Pesquisei no Google e descobri alguns resultados, cada um seguindo truques diferentes. Dê uma olhada neles:

Editar:

Acabei de adicionar o código de cada link para futuros visitantes.

Classificação alfanumérica no MySQL

Entrada dada


1A 1a 10A 9B 21C 1C 1D

Saída esperada
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

Classificação Natural no 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  

Classificação de valores numéricos misturados com 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 isto ajude