ITPub博客

首页 > 数据库 > 国内数据库 > GBase8s自定义聚集函数

GBase8s自定义聚集函数

原创 国内数据库 作者:wj_2021 时间:2021-03-23 10:13:42 0 删除 编辑


GBase8s 数据库是 如何自定义聚集函数 , 以 strsum 函数举例 .

 

功能说明:

strsum 函数的功能:使用 '-' 连接符号将多个字符连接在一起。

举例:

create table test_str(t1 integer,t2 varchar(255));

表test_str 的数据如下

insert into test_str values (1,'A');

insert into test_str values (1,'B');

insert into test_str values (1,'C');

insert into test_str values (2,'A');

insert into test_str values (2,'B');

insert into test_str values (3,'A');

insert into test_str values (4,'A');

 

select t1,strsum(t2) t2_sum from test_str

where 1=1

group by t1 order by t1;

t1 t2_sum

1 A-B-C-

2 A-B-

3 A-

4 A-

 

若需要去掉最后一个 '-' 字符 , 只需要修改为如下 SQL

select t1,rtrim(strsum(t2),'-') t2_sum from test_str

where 1=1

group by t1 order by t1;

t1 t2_sum

1 A-B-C

2 A-B

3 A

4 A

 

在某些情况,我们需要采用不同的连接符,我们只需要修改查询SQL 语句,采用 replace 函数替换 '-' 符号。

select t1,replace(rtrim(strsum(t2),'-'),'-','||') t2_sum from test_str

where 1=1

group by t1 order by t1;

t1 t2_sum

1 A||B||C

2 A||B

3 A

4 A

 

 

如何定义聚集函数

如下我们将说明如何自定义该聚集函数strsum ;

首先定义聚集函数的4 个子函数 str_sum_init,str_sum_iter,str_sum_combine,str_sum_final; 其中 str_sum_iter 中定义了聚集算法为:采用 '-' 连接。

最后定义聚集函数strsum

 

代码详细见如下:

 

CREATE FUNCTION str_sum_init (dummy lvarchar(4000))

   RETURNING lvarchar(4000);

   RETURN '';

END FUNCTION;

 

CREATE FUNCTION str_sum_iter (result lvarchar(4000), value lvarchar(4000))

   RETURNING lvarchar(4000);

   RETURN result || value ||'-';

END FUNCTION;

 

CREATE FUNCTION str_sum_combine(partial1 lvarchar(4000), partial2 lvarchar(4000))

   RETURNING lvarchar(4000);

   RETURN partial1 || partial2;

END FUNCTION;

 

CREATE FUNCTION str_sum_final(final lvarchar(4000))

   RETURNING lvarchar(4000);

   RETURN final;

END FUNCTION;

 

CREATE AGGREGATE strsum  WITH

   (INIT = str_sum_init,

    ITER = str_sum_iter,

    COMBINE = str_sum_combine,

    FINAL = str_sum_final);


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69993860/viewspace-2764335/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-01-25

  • 博文量
    35
  • 访问量
    22879