温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

postgresql怎么处理空值

发布时间:2026-09-07 01:44:36 来源:亿速云 阅读:117 作者:小樊 栏目:数据库

在 PostgreSQL 中,“空值”通常指 NULL,表示“未知 / 不存在的值”,而不是空字符串 '' 或 0。下面从含义、判断、处理、运算、查询、函数几个方面系统说明。


一、NULL 的基本概念

  • NULL ≠ ''(空字符串)
  • NULL ≠ 0
  • NULL 与任何值比较结果都是 未知(unknown),不是 true 也不是 false
SELECT NULL = NULL;      -- NULL
SELECT NULL IS NULL;    -- true

二、判断 NULL(重点)

❌ 错误写法:

WHERE col = NULL

✅ 正确写法:

WHERE col IS NULL
WHERE col IS NOT NULL

三、常用 NULL 处理函数

1️⃣ COALESCE(最常用)

返回第一个非 NULL 的值

SELECT COALESCE(phone, '无电话')
FROM user;

SELECT COALESCE(a, b, c, '默认值');

✅ 常用于:防止 NULL 参与运算


2️⃣ NULLIF

当两个值相等时返回 NULL

SELECT NULLIF(score, 0);
-- 如果 score = 0,返回 NULL

常用于避免除零错误:

SELECT amount / NULLIF(total, 0)
FROM orders;

3️⃣ CASE WHEN

SELECT
  CASE
    WHEN col IS NULL THEN '缺失'
    ELSE col
  END
FROM t;

四、NULL 与运算

SELECT 1 + NULL;     -- NULL
SELECT 'a' || NULL; -- NULL(注意!)

✅ 字符串拼接安全写法:

SELECT 'a' || COALESCE(NULL, '');

五、聚合函数与 NULL

  • COUNT(*):统计所有行
  • COUNT(col):忽略 NULL
  • SUM / AVG / MAX / MIN:自动忽略 NULL
SELECT COUNT(*), COUNT(age) FROM user;

六、排序中的 NULL

默认规则:

  • ASC:NULL 排在最后
  • DESC:NULL 排在最前

自定义:

ORDER BY col NULLS FIRST;
ORDER BY col NULLS LAST;

七、唯一约束与 NULL

CREATE TABLE t (
  id SERIAL,
  code TEXT UNIQUE
);

✅ 允许多个 NULL(PostgreSQL 特性)


八、索引与 NULL

CREATE INDEX idx_col ON t(col);
-- 默认不包含 NULL

包含 NULL:

CREATE INDEX idx_col ON t(col) WHERE col IS NOT NULL;

九、常见坑总结

场景 建议
判断空 用 IS NULL
计算 用 COALESCE
除零 用 NULLIF
拼接 用 COALESCE(..., '')
排序 明确 NULLS FIRST/LAST

如果你有具体业务场景(比如报表、导入数据、JSON、关联查询),可以告诉我,我给你写针对性 SQL。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手