PostgreSQL - 使用 case 语句测试整数时返回字符串

Sco*_*tin 3 sql postgresql conditional case

从表中选择一些数据时,我想使用CASE语句在出现空值时返回“n/a”。

这是我正在查看的表格的简化但具有代表性的版本:

CREATE TABLE test (
    id INTEGER NOT NULL,
    paid_cents INTEGER NULL DEFAULT NULL,
    PRIMARY KEY (id)
);

INSERT INTO test VALUES (1, 100);
INSERT INTO test VALUES (2, NULL);
INSERT INTO test VALUES (3, 0);
Run Code Online (Sandbox Code Playgroud)

我希望能够使用以下查询:

SELECT CASE
    WHEN paid_cents IS NULL THEN 'n/a'
    ELSE paid_cents / 100
    END AS "dollar amount"
FROM test
Run Code Online (Sandbox Code Playgroud)

这个小提琴的行为完全符合我的预期。但是在我的真实数据库(PostgreSQL 9.4)上尝试这个会导致错误:

错误:整数的无效输入语法:“n/a”第
2 行:WHENpaid_cents 为 NULL THEN 'n/a'

似乎 Postgres 期望在测试整数时返回一个整数(并且将 'n/a' 更改为数字确实有效)。我猜我需要去CAST某个地方?

Vao*_*sun 5

要么使用NULL

SELECT CASE
    WHEN paid_cents IS NULL THEN NULL
    ELSE paid_cents / 100
    END AS "dollar amount"
FROM test
Run Code Online (Sandbox Code Playgroud)

或将两者都转换为字符串:

SELECT CASE
    WHEN paid_cents IS NULL THEN 'n/a'
    ELSE (paid_cents / 100)::text
    END AS "dollar amount"
FROM test
Run Code Online (Sandbox Code Playgroud)