Как отсортировать Alphanumeri c с использованием Postgresql (указать данные c)? - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблемы с сортировкой данных alphanumeri c с использованием 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"

Я перепробовал все решения, описанные в Alphanumeri c сортировка с PostgreSQL и Alphanumeri c сортировка с PostgreSQL и не работал.

1 Ответ

1 голос
/ 14 апреля 2020

Я думаю, что вы можете сделать это, что-то вроде этого:

   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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...