Сортировка результатов в 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;
,
Сам не пробовал, но стоит посмотреть.