Сортировка результатов в SQL-запросе по алфавиту и по номерам

Я хочу сделать SELECT из определенной таблицы (например, "table1") со столбцом (например, "column1"), который содержит букву, за которой следует число (например, z98, k87, a245, a241, d7, e91, e32, b212, r101, r32)

Есть ли способ сделать выборку, которая сортирует результаты по этому столбцу в алфавитном порядке по первой букве, а затем по возрастанию, используя числа, следующие за ними? (напр. a241, a245, b212, e32 и т. д.) Цель состоит в том, чтобы заполнить таблицы данных в пользовательском интерфейсе в соответствии с их буквой из результатов, например:

datatable_A= 
241 
245

datatable_B =
212

datatable_D= 
32
91

datatable_K=
87

datatable_R=
32
101

datatable_Z=
98

2 ответа

Решение

Если вы имеете в виду числа должны обрабатываться численно, а не как строка:

create table table1 (column1 text);
insert into table1 (column1) values
('z98'), ('k87'), ('a245'), ('a241'), ('d7'), ('e91'), ('e32'), ('b212'), ('r101'), ('r32')
;

select 
    substring(column1 from 1 for 1) as datatable, 
    substring(column1 from 2)::integer as "number"
from table1
order by 
    datatable, 
    "number"
;
 datatable | number 
-----------+--------
 a         | 241
 a         | 245
 b         | 212
 d         | 7
 e         | 32
 e         | 91
 k         | 87
 r         | 32
 r         | 101
 z         | 98
(10 rows)

Что-то вроде select 'a' || column from tableA union select 'b' || column from tableB ... order by column asc;,
Сам не пробовал, но стоит посмотреть.

Другие вопросы по тегам