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

Ordenación natural SQL ORDENAR POR

Esto lo hará:

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

Los 4 niveles de the ORDER BY :

  1. REGEXP asigna a cualquier línea alfa un 1 y no alfa un 0
  2. SIGNED INT Ordena todos los números por la parte que precede al guión.
  3. SIGNED INT después de quitar el guión, ordena cualquiera de los elementos con el mismo valor antes del guión por la porción después del guión. Potencialmente podría reemplazar el número 2, pero no querría tratar el 90-1 de la misma manera que el 9-01 si surgiera el caso.
  4. Ordena las letras alfabéticamente.

Demostración:SQL Fiddle