sql >> Database >  >> RDS >> Mysql

Natuurlijk sorteren SQL ORDER BY

Dit zal het doen:

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 niveaus van the ORDER BY :

  1. REGEXP wijst elke alfaregel een 1 en niet-alfas een 0 toe
  2. SIGNED INT Sorteert alle getallen op het gedeelte voorafgaand aan het streepje.
  3. SIGNED INT na het verwijderen van het streepje sorteert u alle items met dezelfde waarde vóór het streepje op het gedeelte na het streepje. Zou mogelijk nummer 2 kunnen vervangen, maar zou 90-1 niet hetzelfde willen behandelen als 9-01 mocht dat het geval zijn.
  4. Rangschikt de letters alfabetisch.

Demo:SQL Fiddle




  1. PostgreSQL-jokerteken LIKE voor een lijst met woorden

  2. SQL Update en vervang substring

  3. geselecteerde waarde haal van db in dropdown-keuzevakoptie met behulp van php mysql-fout

  4. Hoe voeg ik meerdere rijen in een enkele invoeginstructie in?