Как объединить пустое / нулевое значение, которое является частью строки Concact в Postgres? - PullRequest
2 голосов
/ 04 мая 2020

У меня есть следующий оператор 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, представление показывает NULL вместо просто целая часть выражения.

Я попытался обернуть это в такой оператор coalesce, но он выдает ошибку.

   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;

Как мне написать строку concat, чтобы, если field_2 имеет значение null, он будет использовать для этого '' и все равно будет возвращать значение?

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Я бы рекомендовал просто использовать для этого строковую функцию concat_ws(): она игнорирует значение null по дизайну, поэтому вам просто не нужно о них беспокоиться:

select 
    tbl_225.id,
    concat_ws('', substring(field_2::text, 0, 100), ' (' || field_1 || ')') as fullname
from schema_1.tbl_225;
0 голосов
/ 04 мая 2020

Используйте coalesce():

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