在POSTGRES中-我正在尝试从2个表创建一个视图。当'0‘的值被编码为插入UNION select语句下半部分数据类型为NUMERIC24,20的EAST_LONGITUDE_NMBR列的值时,将生成一条错误消息。
视图范围的列EAST_LONGITUDE_NMBR来自数据类型为NUMERIC24,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‘导致创建视图范围时出现以下错误。
错误:联合类型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[],整数,小数
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[]的列,没有将'0‘作为实际值的示例。
我觉得这是一个简单的解决方法,只需在这里或那里敲击几个键来设置适当的值,但我就是搞不懂。我正在使用pgAdmin4。
你能帮上忙吗?谢谢,玛格丽特
发布于 2019-10-30 18:33:06
看起来很简单:使用数组而不是0。
根据您的喜好,您可以使用
ARRAY[]::numeric[] -- empty array
或
ARRAY[0]::numeric[] -- array with a single 0
https://stackoverflow.com/questions/58631681
复制