注册
实现postgresql generate_series函数的部分功能
技术分享/ 文章详情 /

实现postgresql generate_series函数的部分功能

XGQ 2023/03/07 1067 0 0

PostgreSQL generate_series函数达梦没有相关的函数,自己写了一个可以实现部分功能,如有不足请指正

create or replace type generate_series_table is varray(10000000) of varchar2(100);

create or replace function generate_series
(pstart varchar2(200),
 pstop varchar2(200),
 step_interval varchar2(200) default 1)
return generate_series_table pipelined 
as 
v_params generate_series_table:=generate_series_table();
v_out number:=1;
v_is_date number;
v_step_interval number;
v_step_interval_date varchar2(500);
v_sql varchar2(500);
 begin
  if isdate(pstart)=0 or isdate(pstop)=0 then
  while pstart::number<=pstop::number loop
        v_params.extend();
        v_params(v_out):=pstart::number;
        pipe row(v_params(v_out));
        pstart:=pstart::number+step_interval;
        v_out:=v_out+1;
  end loop;
  else
  select regexp_substr(step_interval,'[0-9]+') into v_step_interval   from dual;
  select upper(regexp_substr(step_interval,'[a-zA-Z]+')) into v_step_interval_date from dual;
  while to_timestamp(pstart,'yyyy-mm-dd hh24:mi:ss')<=to_timestamp(pstop,'yyyy-mm-dd hh24:mi:ss') loop
        v_params.extend();
        v_params(v_out):=pstart;
        pipe row(v_params(v_out));
        v_sql:='select dateadd('||v_step_interval_date||','||v_step_interval||','||''''||pstart||''''||')';
        execute immediate v_sql into pstart;
        v_out:=v_out+1;
  end loop;
  end if;
 end;


按照间隔5生成数字
image.png

按照时间生成数字
image.png

按照时间的步长可以为
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服