sql >> Databasteknik >  >> RDS >> Mysql

Avancerad MySQL alfabetisk sortering med prefix?

Du kan göra så här:

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

Det kan vara en bra idé att skapa en vy över den här tabellen som projicerar ett extra name_value kolumnen satt till IF() uttryck ovan. Sedan kan du beställa efter den här kolumnen och välja den utan att behöva förorena dina frågor med IF() .

Exempelvy, förutsatt att universitetsnamnet är lagrat i kolumnen 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;

Sedan kan du välja från Universities på samma sätt som du gör från list_universities , förutom att det kommer att ha ett extra name_value kolumn som du kan välja, eller beställa efter, eller vad som helst.

Observera att detta tillvägagångssätt (liksom ORDER BY IF(...) ) kommer inte att kunna använda något index på name för att förbättra prestandan av denna typ.



  1. Kontrollera om en tabell har en främmande nyckel i SQL Server med OBJECTPROPERTY()

  2. Fallgropar att undvika när du använder den nya Microsoft SSMA version 7.8

  3. Kan du använda auto-increment i MySql utan att det är den primära nyckeln

  4. Hur man visar sekvensnummer i MySQL-frågeresultat