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

标签 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

我试过这个查询:

select * from table_name ORDER BY "name"ASC

但是返回

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

我该怎么做?

最佳答案

您应该能够将 "name" 列中的数字作为 int 来进行 ORDER BY。为此,您需要确保首先使用 regexp_replace 删除所有非数字。

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

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

关于sql - 使用 Postgres 对 varchar 列中的结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682438/

相关文章:

postgresql - KnexJS (Postgres) 中等效的数字类型是什么?

ruby-on-rails - Rails - 为模式用户提供和检查大小

sql - 如何选择/查找表数据以及最新的关联(多对多)数据

mysql - SQL - 在 UPDATE 语句中提供 AS 关键字

python - 如何使用 Python 将数据写入从 SQL 数据库获取的文件? (sqlite3)

sql - 如何使用 Perl 获取 SQL 表上的索引列表?

ruby-on-rails - 我的/etc/sysctl.conf 文件在哪里? Postgresql Fatal 无法创建共享内存段

sql - SQL:选择表中存在复合键的选择查询中存在的所有记录

PostgreSQL - 模式匹配 - 字符串到子字符串

ruby-on-rails-3 - 通过 Homebrew 软件与山狮OS X进行Postgresql