使用 Postgres 对 varchar 列中的结果进行排序
Sort results in varchar column with Postgres
我的 table
中有这些值
id | NAME
1 | 20 MEGA
2 | 30 MEGA
3 | 10 MEGA
4 | 300 MEGA
5 | 100 MEGA
6 | 25 MEGA
我想要的:
id | NAME
3 | 10 MEGA
1 | 20 MEGA
6 | 25 MEGA
2 | 30 MEGA
5 | 100 MEGA
4 | 300 MEGA
我试过这个查询:
select * 来自 table_name 按 "name" ASC
排序
但是returns
3 10 MEGA
5 100 MEGA
1 20 MEGA
6 25 MEGA
2 30 MEGA
4 300 MEGA
我该怎么做?
您应该能够通过将 "name"
列中的数字视为 int
来对其进行排序。为此,您需要确保首先使用 regexp_replace.
删除任何非数字
ORDER BY regexp_replace("name", '\D', '', 'g')::int ASC
您可以更进一步,将空值转换为 0
或 NULL
。
我的 table
中有这些值id | NAME
1 | 20 MEGA
2 | 30 MEGA
3 | 10 MEGA
4 | 300 MEGA
5 | 100 MEGA
6 | 25 MEGA
我想要的:
id | NAME
3 | 10 MEGA
1 | 20 MEGA
6 | 25 MEGA
2 | 30 MEGA
5 | 100 MEGA
4 | 300 MEGA
我试过这个查询:
select * 来自 table_name 按 "name" ASC
排序但是returns
3 10 MEGA
5 100 MEGA
1 20 MEGA
6 25 MEGA
2 30 MEGA
4 300 MEGA
我该怎么做?
您应该能够通过将 "name"
列中的数字视为 int
来对其进行排序。为此,您需要确保首先使用 regexp_replace.
ORDER BY regexp_replace("name", '\D', '', 'g')::int ASC
您可以更进一步,将空值转换为 0
或 NULL
。