【发布时间】:2018-01-22 10:45:19
【问题描述】:
当从表中选择一些数据时,我想使用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);
我希望能够使用以下查询:
SELECT CASE
WHEN paid_cents IS NULL THEN 'n/a'
ELSE paid_cents / 100
END AS "dollar amount"
FROM test
A fiddle 的行为完全符合我的预期。但是在我的真实数据库(PostgreSQL 9.4)上尝试这个会导致错误:
错误:整数的输入语法无效:“n/a”
第 2 行:当paid_cents 为 NULL THEN 'n/a'
似乎 Postgres 期望在测试整数时返回一个整数(并且将 'n/a' 更改为一个数字确实有效)。我猜我需要CAST 某处?
【问题讨论】:
-
postgres 将 NULL 视为未知 - 也许
WHEN paid_cents IS NULL THEN NULL会服务?.. 因为你不能在列中混合数据类型 - 它是 ether int 或 char
标签: sql postgresql conditional case