Skip to content

PostgreSQL NULLIF 函数 ​

本文介绍如何使用 PostgreSQL 的 NULLIF 函数来比较两个值并在特定情况下返回 NULL。

PostgreSQL 的 NULLIF 函数用于比较两个表达式,如果它们相等,则返回 NULL,否则返回第一个表达式的值。

你可以在 SELECT 语句以及其他需要进行条件判断的地方使用 NULLIF 函数。

PostgreSQL NULLIF 语法 ​

这里是 PostgreSQL NULLIF 函数的语法:

sql
NULLIF(arg1, arg2)

解释:

  • arg1 和 arg2 是要进行比较的两个表达式。
  • 如果 arg1 和 arg2 相等,则 NULLIF 函数返回 NULL。
  • 如果 arg1 和 arg2 不相等,则返回 arg1 的值。

PostgreSQL NULLIF 实例 ​

简单示例 ​

先看一个简单的示例。

比如,你有一个表 products,其中包含产品的原价 original_price 和折扣价 discounted_price 字段。你想要计算折扣率,但如果原价和折扣价相等,说明没有折扣,此时应返回 NULL。

sql
SELECT original_price, discounted_price,
       NULLIF(original_price - discounted_price, 0) AS discount_amount,
       CASE WHEN NULLIF(original_price - discounted_price, 0) IS NULL THEN NULL
            ELSE ((original_price - discounted_price) / original_price) * 100 END AS discount_percentage
FROM products;

假设表中有以下数据:

original_pricediscounted_price
10080
5050
120100

查询结果将是:

original_pricediscounted_pricediscount_amountdiscount_percentage
100802020.00
5050NULLNULL
1201002016.67

使用 NULLIF 函数进行条件判断 ​

在另一个场景中,假设你有一个学生成绩表 student_scores,包含学生的考试成绩 score 和平时成绩 classwork_score 字段。如果考试成绩和平时成绩相等,你希望在特定计算中忽略这个学生的数据。

sql
SELECT student_name, score, classwork_score,
       NULLIF(score, classwork_score) AS adjusted_score
FROM student_scores;

假设表中有以下数据:

student_namescoreclasswork_score
Alice8580
Bob9090
Charlie7572

查询结果将是:

student_namescoreclasswork_scoreadjusted_score
Alice858085
Bob9090NULL
Charlie757275

结论 ​

在本文中,我们讨论了 PostgreSQL NULLIF 函数的语法,并提供了几个示例。NULLIF 函数在进行条件判断和处理特定情况时非常有用,可以使查询结果更加准确和灵活。它是 PostgreSQL 中一个重要的函数,在实际应用中可以根据具体需求进行灵活运用。😃