Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fortgeschrittene alphabetische MySQL-Sortierung mit Präfix?

Sie könnten dies tun:

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

Es könnte eine gute Idee sein, eine Ansicht über diese Tabelle zu erstellen, die einen zusätzlichen name_value projiziert Spalte auf IF() gesetzt Ausdruck oben. Dann können Sie nach dieser Spalte sortieren und auswählen, ohne Ihre Abfragen mit IF() verunreinigen zu müssen .

Beispielansicht unter der Annahme, dass der Hochschulname in der Spalte name hinterlegt ist :

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

Dann können Sie unter Universities auswählen auf die gleiche Weise wie bei list_universities , außer dass es einen zusätzlichen name_value hat Spalte, die Sie auswählen oder sortieren können oder was auch immer.

Beachten Sie, dass dieser Ansatz (sowie ORDER BY IF(...) ) kann keinen Index für name verwenden um die Leistung der Sortierung zu verbessern.