跳到主要内容

如何在SQL查询存在NULL值时返回默认值

· 3 分钟阅读 · - · - ·

在SQL查询(PostgreSQL)时候有时候会返回null值, 但我们程序里面又不着null值的话, 如何在SQL中定义一个默认值呢?让本应该为NULL的时候返回该默认值。

直接在建表的时候指定该字段不可为null且指定默认值当然可以。

但还有其他情况结果中有null但我们不需要null的时候, 比如sum函数, 在没有查询结果的时候sum的返回值就是null

其实在psql中可以使用下面5种方法来实现这个效果

CASE

CASE在psql官方文档中这样描述的

CASE WHEN 条件 THEN 结果
[WHEN ...]
[ELSE 结果]
END

比如要实现值为NULL时返回默认值

SELECT CASE WHEN 字段名 IS NULL THEN 默认值 ELSE 字段名 END
FROM 表名

COALESCE

COALESCE是一个函数, 返回输入参数的第一个不为NULL的值

格式为:

COALESCE([, ...])

要实现值为NULL时返回默认值

SELECT COALESCE(字段名,默认值) FROM 表名

NULLIF

NULLIF是一个函数, 接收两个参数,并不是为NULL时返回默认值, 而是两个参数相等时返回NULL

格式为:

NULLIF(1,2)

比如若某个值为字符串’null’返回null值

SELECT NULLIF(字段名,'null') FROM 表名

GREATEST 和 LEAST

GREATESTLEAST 也都是函数, 可以接收多个参数

GREATEST 是返回值中的最大值, 如果值中存在null则认为null为最小值

LEAST 是返回值中的最小值,如果值中存在null则认为null为最大值

何方的个人小站的文章排序就是用的GREATEST,把创建时间和上次修改时间做比较,最新的在最前面。

比如下面的语句结果为1:

SELECT LEAST(12, 1, 5, 2, 3, 67, NULL, 43)

下面的语句结果为67:

SELECT GREATEST(12, 1, 5, 2, 3, 67, NULL, 43)
该内容为何方原创,转载请注明本页地址
https://iamhefang.cn/code/return-default-value-in-psql-when-null