Search code examples
sqlstringpostgresqlsql-order-bypostgresql-11

How to sort numbers last in PostgreSQL?


Found many related answers, but nothing that did this.

How to sort by numbers last:

AA
ZZ
11
55

And, preferably (but not necessary)

AA
A1
A2

PostgreSQL 11.9

Also, probably don't want to use a regex for performance reasons. Don't want to create an index either...


Solution

  • I think a regex is the right way to do this:

    order by (col ~ '\d')::int, col
    

    This puts first rows that contain no digit at all, then the remaining rows. Within each group, rows are sorted by ascending value.