2012-06-04 5 views
0

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

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

datatable_A= 
241 
245 

datatable_B = 
212 

datatable_D= 
32 
91 

datatable_K= 
87 

datatable_R= 
32 
101 

datatable_Z= 
98 

ответ

1

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

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) 
0

Что-то вроде select 'a' || column from tableA union select 'b' || column from tableB ... order by column asc;.
Не пробовал это сам, но вы должны изучить его.