Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何计算某些字段是否全部不为空?_Postgresql - Fatal编程技术网

Postgresql 如何计算某些字段是否全部不为空?

Postgresql 如何计算某些字段是否全部不为空?,postgresql,Postgresql,假设我有一个表“articles”,其中包含“author”、“title”(可空)和“body”(可空)列。当我查询这个表时,我想得到第四列:一个布尔值,表示“title”和“body”是否都已设置。我怎样才能对博士后做到这一点 我不想存储第四列。我希望它是动态计算的,所以我希望我可以做如下操作: SELECT author, title, body, ALL(title, body) AS is_complete FROM articles; SELECT author,

假设我有一个表“articles”,其中包含“author”、“title”(可空)和“body”(可空)列。当我查询这个表时,我想得到第四列:一个布尔值,表示“title”和“body”是否都已设置。我怎样才能对博士后做到这一点

我不想存储第四列。我希望它是动态计算的,所以我希望我可以做如下操作:

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;