【问题标题】:How can I add a default value for null values when using string_agg in SQL?在 SQL 中使用 string_agg 时,如何为空值添加默认值?
【发布时间】:2019-06-20 21:14:46
【问题描述】:

我在选择查询中有这个:

  string_agg(CAST('(' || item.name || ', price:' || item.price || ')' AS text), ' ') as item_price,

有时价格为空,我希望它默认为'TBD'。有没有办法只做item.price OR "TBD" 之类的事情,或者以某种方式添加默认值而不向价格列添加默认值?

【问题讨论】:

  • 为您的数据库查找 COALESCE 函数,正如您在标签中提到的几个。它返回第一个非空表达式,因此您可以使用 COALESCE(item.price, 'TBD') 代替 item.price。
  • @SQLRaptor 似乎不适用于 CAST,它似乎正在寻找项目上的“待定”列
  • 这是错误的字符串分隔符问题。您使用的是什么 DBMS?
  • @SQLRaptor postgres

标签: mysql sql postgresql


【解决方案1】:

使用COALESCE():

string_agg(CAST('(' || item.name || ', price:' || COALESCE(item.price, 'TBD') || ')' AS text), ' ') as item_price,

您可能需要转换为字符串,具体取决于类型:

string_agg(CAST('(' || item.name || ', price:' || COALESCE(item.price::text, 'TBD') || ')' AS text), ' ') as item_price,

【讨论】:

    【解决方案2】:

    您应该使用 COALESCE 功能。这将返回 'TBD' 是 item.price 的值是 NULL。像这样使用它:

    string_agg(CAST('(' || item.name || ', price:' || COALESCE(item.price, 'TBD') || ')' AS text), ' ') as item_price,
    

    【讨论】:

      【解决方案3】:

      SQL Coalesce 函数用于处理 NULL 值。在表达式求值过程中,NULL 值将替换为用户定义的值。

      SQL Coalesce 函数按顺序计算参数,并始终从定义的参数列表中返回第一个非空值。

      在你的情况下,函数的用法是:

      string_agg(CAST('(' || item.name || ', price:' || COALESCE(item.price, 'TBD') || ')' AS text), ' ') as item_price,
      

      【讨论】:

        猜你喜欢
        • 2019-09-07
        • 1970-01-01
        • 1970-01-01
        • 2013-11-28
        • 2018-10-04
        • 2023-03-25
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多