Postgres - 在较低的 UNION select 语句中插入 NUMERIC[] 值 '0'
Postgres - insert NUMERIC[] value '0' in lower UNION select statement
在 POSTGRES 中 - 我正在尝试从 2 tables 创建一个视图。当“0”的值被编码为 UNION select 语句下部数据类型 NUMERIC[24,20] 的 EAST_LONGITUDE_NMBR 列的值时,将生成错误消息。
视图 EXTENTS 的列 EAST_LONGITUDE_NMBR 来自 table 和数据类型为 NUMERIC[24,20]
的列 CELL_EXTENT.EAST_LONGITUDE_NMBR
代码如下
CREATE VIEW EXTENTS
(
ID,
EXTENT_TYPE,
NAME,
EAST_LONGITUDE_NMBR
)
AS
SELECT
"CELL_EXTENT"."CELL_ID_NMBR",
'CELL',
UPPER ("CELL_EXTENT"."CELL_NAME"),
"CELL_EXTENT"."EAST_LONGITUDE_NMBR"
FROM "EARTH"."CELL_EXTENT"
UNION
(SELECT
"AREA_INTEREST"."AREA_ID_NMBR",
'GEOPOLITICAL',
UPPER ("AREA_INTEREST"."AREA_NAME"),
0
FROM "EARTH"."AREA_INTEREST");
在较低的 UNION select 中插入值 '0' 导致在创建视图 EXTENTS 时出现以下错误。
错误:UNION 类型数字[] 和整数无法匹配
我已尝试以下操作并收到显示的错误:
0 ERROR: UNION types numeric[] and integer cannot be matched
0.0 ERROR: UNION types numeric[] and numeric cannot be matched
0.0::NUMERIC[] ERROR: cannot cast type numeric to numeric[]
0::NUMERIC[] ERROR: cannot cast type integer to numeric[]
我查看了许多讨论 Postgres 数据类型的网站,尤其是 NUMERIC、NUMERIC[]、INTEGER、DECIMAL
Difference between DECIMAL and NUMERIC datatype in PSQL
https://github.com/npgsql/npgsql/issues/655
https://www.cybertec-postgresql.com/en/mapping-oracle-datatypes-to-postgresql/
http://www.postgresqltutorial.com/postgresql-cast/
http://www.postgresqltutorial.com/postgresql-to_number/
我可以继续,但你明白了。有很多关于数据类型的内容,但是在 Postgres 代码中没有关于 UNION 语句中数据类型为 NUMERIC[] 的列的实际值的示例。
我觉得这是一个简单的修复,在这里或那里敲几下键来设置正确的值,但它让我望而却步。我正在使用 pgAdmin4。
你能帮忙吗?
谢谢,
玛格丽特
看起来很简单:使用数组而不是 0。
根据您的喜好,您可以使用
ARRAY[]::numeric[] -- empty array
或
ARRAY[0]::numeric[] -- array with a single 0
在 POSTGRES 中 - 我正在尝试从 2 tables 创建一个视图。当“0”的值被编码为 UNION select 语句下部数据类型 NUMERIC[24,20] 的 EAST_LONGITUDE_NMBR 列的值时,将生成错误消息。
视图 EXTENTS 的列 EAST_LONGITUDE_NMBR 来自 table 和数据类型为 NUMERIC[24,20]
的列 CELL_EXTENT.EAST_LONGITUDE_NMBR代码如下
CREATE VIEW EXTENTS
(
ID,
EXTENT_TYPE,
NAME,
EAST_LONGITUDE_NMBR
)
AS
SELECT
"CELL_EXTENT"."CELL_ID_NMBR",
'CELL',
UPPER ("CELL_EXTENT"."CELL_NAME"),
"CELL_EXTENT"."EAST_LONGITUDE_NMBR"
FROM "EARTH"."CELL_EXTENT"
UNION
(SELECT
"AREA_INTEREST"."AREA_ID_NMBR",
'GEOPOLITICAL',
UPPER ("AREA_INTEREST"."AREA_NAME"),
0
FROM "EARTH"."AREA_INTEREST");
在较低的 UNION select 中插入值 '0' 导致在创建视图 EXTENTS 时出现以下错误。
错误:UNION 类型数字[] 和整数无法匹配
我已尝试以下操作并收到显示的错误:
0 ERROR: UNION types numeric[] and integer cannot be matched
0.0 ERROR: UNION types numeric[] and numeric cannot be matched
0.0::NUMERIC[] ERROR: cannot cast type numeric to numeric[]
0::NUMERIC[] ERROR: cannot cast type integer to numeric[]
我查看了许多讨论 Postgres 数据类型的网站,尤其是 NUMERIC、NUMERIC[]、INTEGER、DECIMAL
Difference between DECIMAL and NUMERIC datatype in PSQL
https://github.com/npgsql/npgsql/issues/655
https://www.cybertec-postgresql.com/en/mapping-oracle-datatypes-to-postgresql/
http://www.postgresqltutorial.com/postgresql-cast/
http://www.postgresqltutorial.com/postgresql-to_number/
我可以继续,但你明白了。有很多关于数据类型的内容,但是在 Postgres 代码中没有关于 UNION 语句中数据类型为 NUMERIC[] 的列的实际值的示例。
我觉得这是一个简单的修复,在这里或那里敲几下键来设置正确的值,但它让我望而却步。我正在使用 pgAdmin4。
你能帮忙吗? 谢谢, 玛格丽特
看起来很简单:使用数组而不是 0。
根据您的喜好,您可以使用
ARRAY[]::numeric[] -- empty array
或
ARRAY[0]::numeric[] -- array with a single 0