【问题标题】:PostgreSQL concatenationPostgreSQL 连接
【发布时间】:2010-10-19 13:57:30
【问题描述】:

我得到了这个函数来连接我的 pgSQL-server 中的字段:

开始 如果 acc 为 NULL 或 acc = '' THEN 返回指令; 别的 返回ACC || ';' ||指示; 万一; 结尾;

效果很好,但现在我希望这个函数能够区分相等的条目。我该怎么做?

【问题讨论】:

  • 请提供更多信息。具体来说,acc是什么?什么是指令?是这些参数吗?它们是唯一感兴趣的字段/变量吗?

标签: postgresql concatenation plpgsql


【解决方案1】:
CREATE TYPE tp_concat AS (data TEXT[], delimiter TEXT);

CREATE OR REPLACE FUNCTION group_concat_iterate(_state tp_concat, _value TEXT, delimiter TEXT, is_distinct boolean)
  RETURNS tp_concat AS
$BODY$
  SELECT
    CASE
      WHEN $1 IS NULL THEN ARRAY[$2]
      WHEN $4 AND $1.data @> ARRAY[$2] THEN $1.data
      ELSE $1.data || $2
  END,
  $3
$BODY$
  LANGUAGE 'sql' VOLATILE;

CREATE OR REPLACE FUNCTION group_concat_finish(_state tp_concat)
  RETURNS text AS
$BODY$
    SELECT array_to_string($1.data, $1.delimiter)
$BODY$
  LANGUAGE 'sql' VOLATILE;

CREATE AGGREGATE group_concat(text, text, boolean) (SFUNC = group_concat_iterate, STYPE = tp_concat, FINALFUNC = group_concat_finish);

像这样使用它:

SELECT  GROUP_CONCAT(textfield, ';', TRUE)
FROM    mytable

如果您不想重复,并且

SELECT  GROUP_CONCAT(textfield, ';', FALSE)
FROM    mytable

如果你这样做了。

【讨论】:

猜你喜欢
  • 2021-11-05
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2016-07-13
  • 2011-09-04
相关资源
最近更新 更多