Postgresql 如何计算某些字段是否全部不为空?
假设我有一个表“articles”,其中包含“author”、“title”(可空)和“body”(可空)列。当我查询这个表时,我想得到第四列:一个布尔值,表示“title”和“body”是否都已设置。我怎样才能对博士后做到这一点 我不想存储第四列。我希望它是动态计算的,所以我希望我可以做如下操作:Postgresql 如何计算某些字段是否全部不为空?,postgresql,Postgresql,假设我有一个表“articles”,其中包含“author”、“title”(可空)和“body”(可空)列。当我查询这个表时,我想得到第四列:一个布尔值,表示“title”和“body”是否都已设置。我怎样才能对博士后做到这一点 我不想存储第四列。我希望它是动态计算的,所以我希望我可以做如下操作: SELECT author, title, body, ALL(title, body) AS is_complete FROM articles; SELECT author,
SELECT author, title, body, ALL(title, body) AS is_complete FROM articles;
SELECT author,
title,
body,
coalesce(title,'') = '' and coalesce(body,'') = '' as is_complete
FROM articles;
我找不到任何方法来实现这一点。有人有什么建议吗
提前感谢。只需检查
是否为空
SELECT author,
title,
body,
title is not null and body is not null as is_complete
FROM articles;
另一种方法是连接两列。如果其中一个为null
则结果也将为null(或者反过来说:只有当两个都不为null时,连接的结果才会不为null):
如果要将空值(“”
)与NULL
值一样处理,则需要使用以下内容:
SELECT author, title, body, ALL(title, body) AS is_complete FROM articles;
SELECT author,
title,
body,
coalesce(title,'') = '' and coalesce(body,'') = '' as is_complete
FROM articles;
如果您经常需要,可以基于此查询创建视图。您可以对行表达式使用
IS NOT NULL
,如:
SELECT author, title, body, ROW(title, body) IS NOT NULL AS is_complete FROM articles;
这意味着:
如果表达式是行值表达式,则当行表达式本身为空或所有行字段为空时,为空
为真;当行表达式本身为非空且所有行字段为非空时,而为非空
为真
(……)
此定义符合SQL标准,是对8.2之前的PostgreSQL版本所显示的不一致行为的更改
当使用语句时,也可以使用大小写
SELECT author,
title,
body,
case when title is not null and body is not null then 1 else 0 end as is_complete
FROM articles;