使用 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

您可以更进一步,将空值转换为 0NULL