是否 || 如果其中一列为空白,Postgres 中的运算符会导致空白结果吗?

vfc*_*sts 3 postgresql operator

我在 Postgres 中使用||运算符连接一些列运行查询,似乎其中一列为空,整个结果为空。这是正常||行为吗?

我的意思是“空白” NULL

ype*_*eᵀᴹ 6

取决于“空白”的含义,NULL或空字符串。

  • 如果这意味着NULL,那么是的,这是正常的。SELECT 'ab' || NULL ;将返回空值。

  • 如果它意味着一个空字符串,那么不。SELECT 'ab' || '' ;会回来'ab'

为避免此问题,您可以使用以下命令将空值转换为空字符串COALESCE()

SELECT 
    COALESCE(str1, '') || COALESCE(str2, '') || ... || COALESCE(strN, '')
Run Code Online (Sandbox Code Playgroud)

或使用CONCAT()CONCAT_WS()函数 - 忽略空值:

SELECT 
    CONCAT(str1, str2, ..., strN)

SELECT 
    CONCAT_WS('', str1, str2, ..., strN)
Run Code Online (Sandbox Code Playgroud)