Postgres:演员表,金钱和NULL值

时间:2015-02-24 22:23:57

标签: postgresql

在我的选择中,我使用它来将整数转换为货币形式。

CAST(mytable.discount AS money) AS Discount

但我无法弄清楚如何避免' NULL'输出如果连接失败(有正当理由)带来可选值。

我这样做是为了避免过去使用NULLS:

COALESCE(mytable.voucher,'----') AS Voucher

但我无法弄清楚如何将CAST和COALESCE组合在一起。我只想让我的折扣NULL字段为' ----'

1 个答案:

答案 0 :(得分:0)

  

这很棘手,因为" mytable.discount AS money"将NULLS转换为$ 0

实际上并非发生了什么,而是在之后发生的隐式演员。

表达式必须具有特定类型。在这种情况下,它是money。因此,我看到$0.00作为我提议的表达式的结果,因为它的----转换为money,而不是NULL

作为解决方案,您可以将内部表达式显式转换为文本,如:

SELECT COALESCE(CAST('1' as money)::text, '--');

SELECT COALESCE(CAST(null as money)::text, '--');

SQLFiddle演示:http://sqlfiddle.com/#!12/d41d8/2866