提要:本教程将向您展示如何使用PostgreSQL NULLIF函数来处理空值。 我们将向您展示一些使用NULLIF函数的例子。

PostgreSQL NULLIF 函数的语法

NULLIF(argument_1,argument_2);

如果 argument_1 等于 argument_2NULLIF 返回 NULL,否则返回 argument_1

比如:

SELECT
 NULLIF (1, 1); -- 返回 NULL

SELECT
 NULLIF (1, 0); -- 返回 1

SELECT
 NULLIF ('A', 'B'); -- 返回 A

PostgreSQL NULLIF 函数的示例

首先,创建 posts 表:

CREATE TABLE posts (
  id serial primary key,
 title VARCHAR (255) NOT NULL,
 excerpt VARCHAR (150),
 body TEXT,
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 updated_at TIMESTAMP
);

接下来,往这张表里插入一些数据:

INSERT INTO posts (title, excerpt, body)
VALUES
      ('test post 1','test post excerpt 1','test post body 1'),
      ('test post 2','','test post body 2'),
      ('test post 3', null ,'test post body 3');

第三,我们的目标是显示帖子概览页面,显示每个帖子的标题和摘录。如果没有提供摘录,我们使用帖子正文的前40个字符。我们可以简单地使用下面的查询来获取 posts 表中的所有行。

SELECT
 ID,
 title,
 excerpt
FROM
 posts;

可以看到,excerptNULL 值。可以使用 COALESCE 函数进行处理:

SELECT
 id,
 title,
 COALESCE (excerpt, LEFT(body, 40))
FROM
 posts;

不幸的是,NULL 值和摘录列中的 '' (空字符串)混合在一起。这就是为什么需要 NULLIF 函数:

SELECT
 id,
 title,
 COALESCE (
 NULLIF (excerpt, ''),
 LEFT (body, 40)
 )
FROM
 posts;
上一篇:PostgreSQL COALESCE