我有一个如下表:
ID | text_field
----| ----------
1 | ABC-432
2 | ABC-1
3 | ABC-10
4 | ABC-5
我想根据text_field
数字部分获得前两个结果的列表
根据上述数据,查询输出将为:
ID | text_field
----| ----------
1 | ABC-432
3 | ABC-10
由于432
和10
是此数据集中的两个最高数字。
答案 0 :(得分:5)
您可以利用Postgres string function substring()
的灵活性,该灵活性支持正则表达式。
SELECT *
FROM t
ORDER BY substring(val, '\d+$')::integer DESC
LIMIT 2
Regexp '\d+$'
的意思是:字符串末尾的所有数字。您需要将其转换为整数,以便执行数字排序。
| val |
| ------- |
| ABC-432 |
| ABC-10 |