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