Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL 'Order By' - trier correctement les caractères alphanumériques

Les gens utilisent différentes astuces pour ce faire. J'ai cherché sur Google et découvert que certains résultats suivent chacun des astuces différentes. Jetez-y un coup d'œil :

Modifier :

Je viens d'ajouter le code de chaque lien pour les futurs visiteurs.

Tri alphanumérique dans MySQL

Contribution donnée

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

Résultat attendu

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

Requête

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

Tri naturel dans MySQL

Contribution donnée

Table: sorting_test
 -------------------------- -------------
| alphanumeric VARCHAR(75) | integer INT |
 -------------------------- -------------
| test1                    | 1           |
| test12                   | 2           |
| test13                   | 3           |
| test2                    | 4           |
| test3                    | 5           |
 -------------------------- -------------

Résultat attendu

 -------------------------- -------------
| alphanumeric VARCHAR(75) | integer INT |
 -------------------------- -------------
| test1                    | 1           |
| test2                    | 4           |
| test3                    | 5           |
| test12                   | 2           |
| test13                   | 3           |
 -------------------------- -------------

Requête

SELECT alphanumeric, integer
       FROM sorting_test
       ORDER BY LENGTH(alphanumeric), alphanumeric  

Tri de valeurs numériques mélangées avec valeurs alphanumériques

Contribution donnée

2a, 12, 5b, 5a, 10, 11, 1, 4b

Résultat attendu

1, 2a, 4b, 5a, 5b, 10, 11, 12

Requête

SELECT version
FROM version_sorting
ORDER BY CAST(version AS UNSIGNED), version;

J'espère que cela vous aidera