对于 MySQL 8 和 SQLite 3.39,所有这 3 个请求都返回 NULL:
SELECT 1 - NULL;
SELECT NULL - 1;
SELECT NULL - NULL;
但对于 PostgreSQL 15,最后一个失败并显示:
error: operator is not unique: unknown - unknown
在最后一种情况下,让 PostgreSQL 返回 NULL 的最短代码是什么?
(请注意,与SELECT a.x - a.y FROM a;
、
x
和y
可能都为 NULL。PostgreSQL 不会抱怨,因为它可以根据列定义确定类型。)
一个简单的解决方案就是:
SELECT CASE
WHEN x IS NULL THEN NULL
WHEN y IS NULL THEN NULL
ELSE x - y
END;
当以字符串形式发送查询时,postgres 从文本表示中推断出参数类型。如果“+”的两个参数都是 NULL,那么它不能推断你的参数实际上是可为空的整数。
因此:
返回值的类型是结果的一部分。如果您使用强类型语言的数据库,那么了解返回类型很重要。前两个应该返回 nullable int:
但我不知道最后一个会返回什么:
在 MySQL 中,您可以在客户端中设置一个选项来显示返回的类型。
x
我想我找到了一种非常简短的方法,可以避免重复和的演算y
(如果有的话):