Informix自定义聚集函数

来源:互联网 发布:个人所得税数据 编辑:程序博客网 时间:2024/05/05 19:47

Informix自定义聚集函数

 

如何自定义聚集函数,本文章以 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);

原创粉丝点击