Postgres-在较低的UNION选择语句中插入NUMERIC []值'0'

时间:2019-10-30 18:28:20

标签: postgresql types numeric

在POSTGRES中-我试图从2个表创建一个视图。当将值0编码为UNION select语句下部的数据类型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 []和整数不能匹配

我尝试了以下操作,并收到显示的错误:

    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 []的列的实际值中没有'0'的示例。

我觉得这是一个简单的解决方法,在这里或那里几次击键以设置适当的值,但这使我难以理解。我正在使用pgAdmin4。

可以帮忙吗? 谢谢, 玛格丽特

1 个答案:

答案 0 :(得分:0)

似乎很简单:使用数组而不是0。

根据您的喜好,可以使用

ARRAY[]::numeric[]   -- empty array

ARRAY[0]::numeric[]  -- array with a single 0