我在Postgres中有一个带有Char数据类型字段的模型. 在此CHAR数据类型中,我基本上需要注册数字,但不能将它们记录为Integer.

如果我try 使用默认数据类型(CHAR)对数据进行排序,则会得到:

82
821
8219 (correct position as Char, but wrong position as an Integer)
822
823
824
825
826
827 
828
829

我需要将这个字符数据作为一个Integer元素进行排序,这样我就可以将值"8219"放到列表底部的正确位置.

我试过使用Order_by INT(field_name),但没有成功.

我try 使用ORDER_BY INT(FIELD_NAME),但没有成功.

推荐答案

如果我创建此架构

create table mytable(
    something char(12)
);

insert into mytable(something)
values
('82'),
('821'),
('8219'),
('822'),
('823'),
('824'),
('825'),
('826'),
('827 '),
('828'),
('829');

并运行以下查询:

select something
from mytable
order by something::integer;

然后我得到了正确的结果:

enter image description here

菲德尔:http://sqlfiddle.com/#!17/794bf/1

其思想是,您可以在order by子句中将该字段转换为integer,以便将这些值作为整数进行比较.这种行为的原因是,如果您比较字符串,那么‘12’比‘9’"小",因为字符串是按其每个字符进行比较的,只要有差异,就由大于另一个的字符来决定比较.如果所有字符比较结果都是相同的字符,则较长的字符串"较大".这就是为什么要将它们作为整数进行比较的原因.

现在,您还应该问问自己,是否出于任何原因将该字段的数据存储为char而不是整数.如果没有这样的原因,则可以更改表并更改该字段的类型.

Postgresql相关问答推荐

Select 所有数组类型和维度

如何在PostgreSQL中以行值的形式获取列

如何获得一起满足数量要求的物品? (WHILE 循环还是 CTE?)postgresql

在Postgres游标中从一行变量中减go 另一行变量

在Postgres中如何连接具有相同名称列的表并更改列名称?

使用FastAPI和PostgreSQL进行测试

如何使 Postgres 优化引擎具有确定性

如何在 kubernetes 中安全地重启 postgresql 容器?

PostgreSql maintenance_work_mem 在索引创建期间增加

如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?

PostgreSQL 如何比 SQLite 更快地执行写入?

INSERT RETURNING 是否保证以 right的顺序返回?

如何正确索引多对多关联表?

SqlAlchemy:多列的不同计数

python pip install psycopg2 安装错误

Postgresql varchar 是否使用 unicode 字符长度或 ASCII 字符长度计算?

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

如果 PostgreSQL count(*) 总是很慢,如何对复杂查询进行分页?

调用 getNextException 来查看原因:如何让 Hibernate / JPA 显示异常的数据库服务器消息

如何为 adminpack 解决 PostgreSQL pgAdmin 错误Server instrumentation not installed?