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

Comment trier les résultats MySQL avec les lettres en premier, les symboles en dernier ?

Cela placera tous les artistes dont le nom commence par une lettre de a à z avant ceux qui ne le font pas :

SELECT DISTINCT artist
FROM songs
ORDER BY artist REGEXP '^[a-z]' DESC, artist

Voyez-le fonctionner en ligne :sqlfiddle

Mais vous préférerez peut-être stocker une deuxième colonne avec le nom simplifié afin de pouvoir les mettre dans un ordre plus logique :

artists

artist            | simplified_name
------------------------------------
&i                | i
+NURSE            | nurse
2007excalibur2007 | excalibur

Les valeurs de simplified_name ne peut pas être facilement généré dans MySQL, vous pouvez donc utiliser un langage de programmation à usage général pour extraire tous les artistes, les transformer en noms simplifiés, puis remplir la base de données avec les résultats.

Une fois cela fait, vous pouvez utiliser cette requête :

SELECT DISTINCT artist
FROM artists
ORDER BY simplified_name