I have the following sample data for a particular column symbol for sample table.
(Update:) The data is not in a regular pattern. Number may occur at any place in between characters.
symbol
COL4A1
COL4A3
COL8A2
COL2A1
COL12A1
COL12A1
COL16A1
COL19A1
I need to sort the this data on database level. I used the following query:
select symbol from sample order by symbol asc
Result is follows:
COL12A1
COL12A1
COL16A1
COL19A1
COL2A1
COL4A1
COL4A3
COL8A2
But I need to get the order in the following way:
COL2A1
COL4A1
COL4A3
COL8A2
COL12A1
COL12A1
COL16A1
COL19A1
PostgreSQL doesn’t offer a number-aware collation that can do “humanized” sorts like “1A, 2A, 3A, … 10A, 11A, …”. It relies on the operating system for collation, and I’m not aware of any OS that exposes such a collation to applications.
To do this, you need to split the text according to a pattern and order by the pattern parts, probably using
regexp_matches.