0

I want to make a SELECT from a certain table (ex. "table1") with a column (ex. "column1") which contains a letter followed by a number (ex. z98, k87, a245, a241, d7, e91, e32, b212, r101, r32)

Is there a way to make a select that sorts the results by this column alphabetically using the first letter and then ascending using the numbers that follow them ? (ex. a241, a245, b212, e32 etc.) The purpose is to fill the datatables on the user interface according to their letter from the results, like this:

datatable_A= 
241 
245

datatable_B =
212

datatable_D= 
32
91

datatable_K=
87

datatable_R=
32
101

datatable_Z=
98
Raidri
  • 17,258
  • 9
  • 62
  • 65
Alex
  • 8,908
  • 28
  • 103
  • 157

2 Answers2

1

If you mean the numbers should be treated numerically and not as string:

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)
Clodoaldo Neto
  • 118,695
  • 26
  • 233
  • 260
0

Something like select 'a' || column from tableA union select 'b' || column from tableB ... order by column asc;.
Did not try it myself, but you should look into it.

popfalushi
  • 1,332
  • 9
  • 15