Esto pondrá a todos los artistas cuyos nombres comienzan con una letra a-z antes de los que no:
SELECT DISTINCT artist
FROM songs
ORDER BY artist REGEXP '^[a-z]' DESC, artist
Véalo funcionando en línea:sqlfiddle
Pero es posible que prefiera almacenar una segunda columna con el nombre simplificado para que pueda ponerlos en un orden que tenga más sentido:
artists
artist | simplified_name
------------------------------------
&i | i
+NURSE | nurse
2007excalibur2007 | excalibur
Los valores para simplified_name
no se puede generar fácilmente en MySQL, por lo que es posible que desee utilizar un lenguaje de programación de propósito general para extraer a todos los artistas, transformarlos en nombres simplificados y luego llenar la base de datos con los resultados.
Una vez hecho esto, puede utilizar esta consulta:
SELECT DISTINCT artist
FROM artists
ORDER BY simplified_name