将空值设置为Postgresql case语句中的默认值

时间:2019-01-09 01:17:55

标签: sql postgresql case

当数据库中的属性变为null时,我正在尝试设置默认值:

case categories.rental_price_percentage when null then '15.0' else categories.rental_price_percentage end rental

但是,当我碰到一个空值时,替换值并没有保留(其余值仍在起作用),它仅显示空值:

{
 id: "3",
 category_name: "Chairs",
 rental: null
}

如何获取默认值并正常工作?

1 个答案:

答案 0 :(得分:2)

在简单的WHEN NULL表达式(不是语句)中的

CASE将永远不会匹配,因为在您的情况下,这要求categories.rental_price_percentage = NULL为真。但是像=>,...这样的针对NULL的比较操作的结果是NULL,即不正确-仅在一侧或两侧,所以即使{ {1}}是不正确的。

使用表达式来评估是否为NULL = NULL NULL

因此您可以使用搜索的IS NULL表达式:

CASE

但是替换CASE WHEN categories.rental_price_percentage IS NULL THEN 15.0 ELSE categories.rental_price_percentage END rental 是一项常见的任务,因此存在一个NULL函数。它返回传递的第一个参数,而不是coalesce()

因此,在您的情况下,您可以简单地使用:

NULL

请注意,我还删除了coalesce(categories.rental_price_percentage, 15.0) rental 周围的单引号,因为它大概是数字值而不是字符串。