postgresql - Postgres - 在较低的 UNION 选择语句中插入 NUMERIC[] 值“0”
问题描述
在 POSTGRES - 我正在尝试从 2 个表创建一个视图。当在 UNION 选择语句的下部将“0”的值编码为数据类型 NUMERIC[24,20] 的 EAST_LONGITUDE_NMBR 列的值以插入时,将生成错误消息。
视图 EXTENTS 的列 EAST_LONGITUDE_NMBR 来自表和列 CELL_EXTENT.EAST_LONGITUDE_NMBR,数据类型为 NUMERIC[24,20]
以下是代码。
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 选择中插入的值 '0' 在创建视图 EXTENTS 时会导致以下错误。
错误:UNION 类型 numeric[] 和 integer 无法匹配
我尝试了以下方法并收到显示的错误:
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
PSQL 中 DECIMAL 和 NUMERIC 数据类型的区别
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[] 列,没有将“0”作为实际值的示例。
我觉得这是一个简单的修复,在这里或那里敲击几个键来设置正确的值,但它让我望而却步。我正在使用 pgAdmin4。
你能帮我吗?谢谢,玛格丽特
解决方案
看起来很简单:使用数组而不是 0。
根据您的喜好,您可以使用
ARRAY[]::numeric[] -- empty array
或者
ARRAY[0]::numeric[] -- array with a single 0
推荐阅读
- android - 如何在 Anko 的 JetPack 中使用导航?
- c# - wpf如何删除矩形(角)线形边框
- node.js - extraHeaders 在 socket.io-client 中不起作用
- ios - IBM MobileFirst 7.0 - libstdc++.6.dylib 上的 Xcode 10.1/iOS 12 问题
- node.js - 从 Vue 组件向 NodeJs 服务器进行异步调用并等待应答
- html - 为图像添加底部和右侧边框
- javascript - 如何仅在反应状态发生突变后才进行axios调用?
- windows - ImageMagick 没有此图像格式“PDF”的解码委托 Windows
- go - 为什么 unmarshal 在 golang 中改变对象的类型
- twitter-bootstrap - 具有对齐中心列的三列行