sql >> Database teknologi >  >> RDS >> Mysql

Naturlig sortering SQL ORDER BY

Dette vil gøre det:

SELECT value FROM Table1 ORDER BY value REGEXP '^[A-Za-z]+$' ,CAST(value as SIGNED INTEGER) ,CAST(REPLACE(value,'-','')AS SIGNED INTEGER) ,value

De 4 niveauer af the ORDER BY :

  1. REGEXP tildeler enhver alfalinje et 1 og ikke-alfas et 0
  2. SIGNED INT Sorterer alle tallene efter den del, der går forud for bindestregen.
  3. SIGNED INT efter fjernelse af bindestreg sorteres alle elementerne med samme værdi før bindestregen efter delen efter bindestregen. Potentielt kunne erstatte nummer 2, men ønsker ikke at behandle 90-1 på samme måde som 9-01, hvis sagen skulle opstå.
  4. Sorterer bogstaverne alfabetisk.

Demo:SQL Fiddle




  1. Oprettelse af en rangliste, hvordan ville jeg gå frem for at vise rang/position?

  2. Avanceret (?) OG/ELLER forespørgsel

  3. Hvordan konverterer man et helt MySQL-databasetegnsæt og sortering til UTF-8?

  4. Få adgang til MAMPs MySQL fra Terminal