如何对文本数据类型进行排序

时间:2019-02-23 23:49:57

标签: sql postgresql

我有一个如下表:

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

由于43210是此数据集中的两个最高数字。

1 个答案:

答案 0 :(得分:5)

您可以利用Postgres string function substring()的灵活性,该灵活性支持正则表达式。

SELECT *
FROM t
ORDER BY substring(val, '\d+$')::integer DESC
LIMIT 2

Regexp '\d+$'的意思是:字符串末尾的所有数字。您需要将其转换为整数,以便执行数字排序。

Demo on DB Fiddle

| val     |
| ------- |
| ABC-432 |
| ABC-10  |