sql >> Databasteknik >  >> RDS >> Mysql

Naturlig sortering SQL ORDER BY

Detta kommer att göra 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 fyra nivåerna av the ORDER BY :

  1. REGEXP tilldelar valfri alfarad en 1 och icke-alfasad en 0
  2. SIGNED INT Sorterar alla siffror efter delen som föregår bindestrecket.
  3. SIGNED INT efter att ha tagit bort strecket sorteras alla objekt med samma värde före strecket efter delen efter strecket. Kan eventuellt ersätta nummer 2, men skulle inte vilja behandla 90-1 på samma sätt som 9-01 om fallet skulle uppstå.
  4. Sorterar bokstäverna i alfabetisk ordning.

Demo:SQL Fiddle




  1. Det går inte att ställa in tabellnamn med små bokstäver i MySQL 8.x på Windows 10

  2. Oracle Datatyper

  3. Dela upp stora raderingsoperationer i bitar

  4. Är cirkulära referenser godtagbara i databasen?