首页 > 解决方案 > 将 PostgreSQL 列转换为存储类型

问题描述

我正在为 PostgreSQL 创建一个查看器。我的 SQL 需要按该列的正常类型进行排序。举个例子:

桌子:

CREATE TABLE contacts (id serial primary key, name varchar)

SQL:

SELECT id::text FROM contacts ORDER BY id;

给出:

1
10
100
2

好的,所以我将 SQL 更改为:

SELECT id::text FROM contacts ORDER BY id::regtype;

这导致:

1
2
10
100

好的!但现在我尝试:

SELECT name::text FROM contacts ORDER BY name::regtype;

结果是:

invalid type name "my first string"

谷歌没有帮助。有任何想法吗?谢谢

重复:错误不是我的问题。我的问题是我需要将每一列转换为text,但按该列的正常类型排序。

标签: postgresqlpostgresql-10

解决方案


regtype是一个对象标识符类型,当您不引用系统对象(在这种情况下为类型)时,没有理由使用它。

您应该integer在第一个查询中将该列转换为:

SELECT id::text 
FROM contacts 
ORDER BY id::integer;

order by您可以在子句中使用限定的列名。这将适用于任何可排序类型的列。

SELECT id::text
FROM contacts 
ORDER BY contacts.id;

推荐阅读