【问题标题】:Alphanumeric Sorting in PostgreSQL 9.4PostgreSQL 9.4 中的字母数字排序
【发布时间】:2017-10-09 09:22:43
【问题描述】:

我在 PostgreSQL 9.4 数据库中有一个表,其中一列包含以下格式的整数和字母数据。

1
10
10A
10A1
1A
1A1
1A1A
1B
1C
1C1
2
65
89

格式是,它以数字开头,然后是字母,然后是数字,然后是字母,然后继续。我想像下面这样对字段进行排序,

1
1A
1A1
1A1A
1B
1C
1C1
2
10
10A
10A1
65
89

但是当排序 10 在 2 之前。请提出一个可能的查询以获得所需的结果。

提前致谢

【问题讨论】:

    标签: sql postgresql natural-sort


    【解决方案1】:

    试试这个

    SELECT *
    FROM table_name
    ORDER  BY (substring(column_name, '^[0-9]+'))::int     -- cast to integer
              ,coalesce(substring(column_name, '[^0-9_].*$'),'')
    

    【讨论】:

    • 感谢您的回复,如果数字出现在字母之后,此查询将中断,请检查输出。 ibb.co/cZ6kJw
    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2012-07-10
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多