PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql ORDER BY-Leerzeichen

Weiß nicht, könnte so aussehen:

with cte as (
   select col1, regexp_split_to_array(col1, ' ') as d
   from Table1

)
select col1
from cte
order by
    d[1] ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$' desc,
    case
        when d[1] ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$' then
            d[1]::numeric
    end,
    d[2]

SQL-Fiddle-Demo

Dieser teilt die Zeichenfolge durch Leerzeichen in ein Array auf, konvertiert den ersten Eintrag in eine Zahl und sortiert die Ergebnisse nach dieser Zahl und der verbleibenden Zeichenfolge