代码之家  ›  专栏  ›  技术社区  ›  Boucherie

在PostgreSQL case语句中将空值设置为默认值

  •  0
  • Boucherie  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  2
  •   sticky bit    6 年前

    WHEN NULL 简单地说 CASE 表达式(它不是语句)永远不会匹配,因为在您的情况下,这需要, categories.rental_price_percentage = NULL 是真的。但是比较运算的结果 = , > ,…反对 NULL S是 无效的 也就是说,不是真的——只有一方或双方,所以甚至 NULL = NULL 不是真的。

    检查表达式的计算结果是否为 无效的 IS NULL 使用。

    所以你可以用搜索 案例 表达式:

    CASE
      WHEN categories.rental_price_percentage IS NULL THEN
        15.0
      ELSE
        categories.rental_price_percentage
    END rental
    

    而是替代 无效的 S是一个很常见的任务,它有一个函数来完成这个任务, coalesce() . 它返回它所传递的第一个参数,而不是 无效的 .

    因此,在您的案例中,您可以简单地使用:

    coalesce(categories.rental_price_percentage, 15.0) rental
    

    注意,我也删除了周围的单引号 15.0 因为它可能是一个数值,而不是字符串。