UNION ALL,将NULL强制转换为double precision,Postgres

7

在Postgres中,当我尝试合并两个表时,其中一个表有一个包含double precision数据类型的列(Amount),而另一个表没有匹配的列,并且我希望从那个表中获取的记录只是在Amount字段中具有NULL值。

错误信息:

"union types text and double precision cannot be matched postgres"

伪代码:

SELECT * FROM (

SELECT
   t1.Amount AS 'amount',
   NULL::DATE AS 'date'
FROM Table1 AS t1
UNION ALL

SELECT
   /* next line is the issue */
   NULL AS 'amount',
   t2.Date AS 'date'
FROM Table2 AS t2

) AS FOO

我相信这个解决方案只是一个简单的类型转换问题,但是在搜索中找不到任何相关内容。我该如何在PostgreSQL中执行类似于NULL::DOUBLE的操作?
编辑::后人
@klin的接受答案以及@a_horse_with_no_name的评论指向了一个“历史性”PostgreSQL类型转换表达式::,其中语法是等效的
CAST ( expression AS type )  
expression::type

这里是PostgreSQL数据类型的列表。

1个回答

9
在Postgres中,类型double precision也被称为float8或简称float。使用其中之一即可。
select null::double precision, null::float;

我最终使用了 NULL::INT,并且它通过了“气味测试”(一次)。您有这种类型转换的用法或文档链接吗?提前感谢。 - wahwahwah
1
@wahwahwah:令人惊讶的是,在语法章节中有一个“类型转换”的章节:https://www.postgresql.org/docs/current/static/sql-expressions.html#SQL-SYNTAX-TYPE-CASTS - user330315
1
你可能还会对类型转换感兴趣。 - klin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接