如何合并作为 Postgres 中 Concat 字符串一部分的 empty/null 值?

How to coalesce an empty/null value that is part of Concact string in Postgres?

我有以下 CREATE View 语句,我在其中连接了几个字段。它获取第一个字段的前 100 个字符,然后附加一个整数字段

  CREATE OR REPLACE VIEW $"schema_1"."tbl_225_customid" AS 
  SELECT tbl_225.id,
  ("substring"((field_2)::text, 0, 100)::text) ||  ' (' || "field_1" || ')' as fullname
  FROM schema_1.tbl_225;

这在 field_2 中有数据时工作正常,但是,当 field_2 为空时,视图显示 NULL 而不仅仅是表达式的整数部分。

我尝试将它包装在这样的合并语句中,但它会引发错误。

   CREATE OR REPLACE VIEW $"schema_1"."tbl_225_customid" AS 
   SELECT tbl_225.id,
   COALESCE(("substring"((field_2)::text, 0, 100)::text),'') ||  ' (' || "field_1" || ')' as fullname
   FROM schema_1.tbl_225;

如果 field_2 为 null,我该如何编写 concat 字符串,它将使用 '' 并仍然产生值?

使用coalesce():

SELECT tbl_225.id,
        COALESCE(substring(field_2::text, 0, 100) , '') ||  coalesce(' (' || "field_1" || ')', '') as fullname
FROM schema_1.tbl_225;

我建议为此简单地使用 string function concat_ws():它在设计上忽略了 null 值,因此您无需担心它们:

select 
    tbl_225.id,
    concat_ws('', substring(field_2::text, 0, 100), ' (' || field_1 || ')') as fullname
from schema_1.tbl_225;