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生成数字
按照时间生成数字
按照时间的步长可以为
文章
阅读量
获赞