Postgresql sorting mixed alphanumeric data

前端 未结 7 1455
无人及你
无人及你 2020-12-30 05:32

Running this query:

select name from folders order by name

returns these results:

alphanumeric
a test
test 20
test 19
test          


        
7条回答
  •  时光说笑
    2020-12-30 06:17

    select * from "public"."directory" where "directoryId" = 17888 order by
    COALESCE(SUBSTRING("name" FROM '^(\d+)')::INTEGER, 99999999),
    SUBSTRING("name" FROM '[a-zA-z_-]+'),
    COALESCE(SUBSTRING("name" FROM '(\d+)$')::INTEGER, 0),
    "name";
    

    NOTE: Escape the regex as you need, in some languages, you will have to add one more "\".

    In my Postgres DB, name column contains following, when I use simple order by name query:

    • 1
    • 10
    • 2
    • 21
    • A
    • A1
    • A11
    • A5
    • B
    • B2
    • B22
    • B3
    • M 1
    • M 11
    • M 2

    Result of Query, After I have modified it:

    • 1
    • 2
    • 10
    • 21
    • A
    • A1
    • A5
    • A11
    • B
    • B2
    • B3
    • B22
    • M 1
    • M 2
    • M 11

提交回复
热议问题