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

¿Ordenación alfabética avanzada de MySQL con prefijo?

Podrías hacer esto:

ORDER BY IF(SUBSTRING(name, 1, 14) = 'University of ', SUBSTRING(name, 15), name)

Podría ser una buena idea crear una vista sobre esta tabla que proyecte un name_value extra columna establecida en IF() expresión anterior. Luego puede ordenar por esta columna y seleccionarla sin tener que contaminar sus consultas con IF() .

Vista de ejemplo, asumiendo que el nombre de la universidad está almacenado en la columna name :

CREATE VIEW Universities AS
    SELECT
        list_universities.*,
        IF(SUBSTRING(name, 1, 14) = 'University of ',
           SUBSTRING(name, 15),
           name) AS name_value
    FROM list_universities;

Luego puede seleccionar entre Universities de la misma manera que lo hace desde list_universities , excepto que tendrá un name_value extra columna que puede seleccionar, ordenar o lo que sea.

Tenga en cuenta que este enfoque (así como ORDER BY IF(...) ) no podrá usar ningún índice en name para mejorar el rendimiento del género.