12

我有 2 个可为空的CHAR列,我需要检查其中是否只有一个为空。

正在做

(a IS NULL AND b IS NOT NULL) OR (a IS NOT NULL AND b IS NULL)

无聊。我想避免为此创建自定义函数。

我在想类似的东西

COALESCE(a, 1) + COALESCE(b, 1) = 1

但只要achar- 它会导致操作数类型错误。

那么,有什么棘手的解决方案吗?

4

2 回答 2

26

如果您的意思恰好是 NULL (与您现有的逻辑相匹配),那么:

a is null != b is null
于 2012-04-18T03:24:33.687 回答
8

如果您使用的是 PostgreSQL,请不要忘记括号...

ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) <> (key2 IS NULL));

(我花了将近 10 分钟试图了解我的 CHECK 出了什么问题。)

于 2014-07-16T11:15:26.653 回答