使用Postgres对varchar列中的结果进行排序

时间:2017-06-21 17:18:39

标签: sql postgresql rails-postgresql natural-sort

我的表中有这些值

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

我尝试了这个查询:

从table_name中选择* ORDER BY“name”ASC

但返回

3   10 MEGA
5   100 MEGA
1   20 MEGA
6   25 MEGA
2   30 MEGA
4   300 MEGA

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您应该能够通过将"name"列中的数字视为int来对其进行排序。为此,您需要确保首先使用regexp_replace删除任何非数字。

ORDER BY regexp_replace("name", '\D', '', 'g')::int ASC

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