I have a table like below:
ID | text_field ----| ---------- 1 | ABC-432 2 | ABC-1 3 | ABC-10 4 | ABC-5
I would like to get a list of the top two results based on the text_field number part
Based on the above data the query output would be:
ID | text_field ----| ---------- 1 | ABC-432 3 | ABC-10
Since 432 and 10 are the two highest numbers in this data set.
Advertisement
Answer
You can take advantage of the flexibility of Postgres string function substring(), that supports regular expressions.
SELECT * FROM t ORDER BY substring(val, 'd+$')::integer DESC LIMIT 2
Regexp 'd+$' means : all digits at the end of the string. You need to cast it to an integer so you can perform a numerical sort.
| val | | ------- | | ABC-432 | | ABC-10 |