在SQL中使用string_agg时,如何为空值添加默认值?

时间:2019-06-20 21:14:46

标签: mysql sql postgresql

在选择查询中有此内容

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

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

3 个答案:

答案 0 :(得分:0)

使用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,

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

在您的情况下,该函数的用法为:

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