【问题标题】:How to sort Alphanumeric using Postgresql (specific data)?如何使用 Postgresql(特定数据)对字母数字进行排序?
【发布时间】:2023-03-15 07:52:01
【问题描述】:

我无法使用 postgresql 对字母数字数据进行排序。我的数据和查询如下所示

WITH x(t) AS (
    VALUES
     ('GPS-10')
    ,('GPS-1')
    ,('GPS-2')
    ,('GPS-8B')
    ,('GPS-8A')
    ,('GPS-14')
    ,('SPS-2')
    ,('SPS-14')
    )
SELECT t
FROM   x
ORDER  BY substring(t, '[^0-9-].*$'), (substring(t, '^[0-9]+'))::int 

它给了我这个错误的结果(GPS-2 出现在 GPS-10 和 GPS-14 之后,SPS 数据也是如此)

"GPS-1"
"GPS-10"
"GPS-14"
"GPS-2"
"GPS-8A"
"GPS-8B"
"SPS-14"
"SPS-2"

我的预期结果是

"GPS-1"
"GPS-2"
"GPS-8A"
"GPS-8B"
"GPS-10"
"GPS-14"
"SPS-2"
"SPS-14"

我已经尝试了Alphanumeric sorting with PostgreSQLAlphanumeric sorting with PostgreSQL 中描述的所有解决方案,但没有奏效。

【问题讨论】:

    标签: postgresql sorting


    【解决方案1】:

    我认为你可以这样做,像这样:

       WITH x(t) AS (
        VALUES
         ('GPS-10')
        ,('GPS-1')
        ,('GPS-2')
        ,('GPS-8B')
        ,('GPS-8A')
        ,('GPS-14')
        ,('SPS-2')
        ,('SPS-14')
        )
    SELECT t
    FROM   x
    ORDER  BY substring(t, 1,3), (substring(substring(t, 5, length(t)), '^[0-9]+'))::int 
    

    【讨论】:

    • 对不起,我忘了添加一些约束。我编辑了我的帖子并添加了新数据。上面的代码将无法处理GPS-8AGPS-8B。你能帮帮我吗?
    • 谢谢!我看到你在子字符串中添加子字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多