在 SELECT 子查询中使用 AS "new_field" 类型转换即时创建的字段
Type cast a field created on-the-fly using AS "new_field" in a SELECT subquery
上下文
我在使用 SELECT
子查询创建 PostgreSQL table 时遇到了一个真正的 tiny 问题使用类型为 INTEGER
的 NULL
值初始化一个字段(如果我没有指定类型,它们默认为 TEXT
)。
废话不多说,下面是一段带有背景说明的代码:
CREATE TABLE my_table AS
SELECT
0 AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
这是按预期工作的,我现在需要在 fid
字段中的任何地方创建 0
。
但我对 0
值不太满意,因为它们在进一步的计算中具有重要意义,因此我想用 NULL
初始化此 fid
字段值(别担心,它不是 pkey
)。
因此,我将其更改为:
CREATE TABLE my_table AS
SELECT
NULL AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
而且效果很好!
除了现在该字段是一个 TEXT
字段(它看起来像是使用 NULL
时的“默认”类型),我真的需要它作为一个 INTEGER
(我是 运行 如果我让它成为 TEXT
),就会陷入更大的麻烦。
问题
我如何将 fid
字段同时设置(即,从技术上讲,转换为 NULL
和 类型 INTEGER
这个特定查询的时间?
None 这些作品(我每次都面临语法错误):
NULL AS fid::INTEGER
INTEGER NULL AS fid
NULL INTEGER AS fid
环境
PostgreSQL 10.12
您实际上必须在 null 之后设置类型转换,使用:
CREATE TABLE my_table AS
SELECT
NULL::INTEGER AS fid, -- initiate new field here as a NULL INTEGER
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
那么你就会拥有它:
结果 pgAdmin。
上下文
我在使用 SELECT
子查询创建 PostgreSQL table 时遇到了一个真正的 tiny 问题使用类型为 INTEGER
的 NULL
值初始化一个字段(如果我没有指定类型,它们默认为 TEXT
)。
废话不多说,下面是一段带有背景说明的代码:
CREATE TABLE my_table AS
SELECT
0 AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
这是按预期工作的,我现在需要在 fid
字段中的任何地方创建 0
。
但我对 0
值不太满意,因为它们在进一步的计算中具有重要意义,因此我想用 NULL
初始化此 fid
字段值(别担心,它不是 pkey
)。
因此,我将其更改为:
CREATE TABLE my_table AS
SELECT
NULL AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
而且效果很好!
除了现在该字段是一个 TEXT
字段(它看起来像是使用 NULL
时的“默认”类型),我真的需要它作为一个 INTEGER
(我是 运行 如果我让它成为 TEXT
),就会陷入更大的麻烦。
问题
我如何将 fid
字段同时设置(即,从技术上讲,转换为 NULL
和 类型 INTEGER
这个特定查询的时间?
None 这些作品(我每次都面临语法错误):
NULL AS fid::INTEGER
INTEGER NULL AS fid
NULL INTEGER AS fid
环境
PostgreSQL 10.12
您实际上必须在 null 之后设置类型转换,使用:
CREATE TABLE my_table AS
SELECT
NULL::INTEGER AS fid, -- initiate new field here as a NULL INTEGER
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
那么你就会拥有它:
结果 pgAdmin。