將字串按照分隔符劃分成為陣列:
create or replace function tools_str2array(
in _originstr varchar(800),
in _delimeter varchar(10)
) returns varchar(800)
as $$
declare _strres varchar(800);
declare _cindex integer;
declare _arrindex integer;
declare _arr_str varchar(800);
declare _tmp_str varchar(800);
declare _debugstr varchar(400);
begin
_arrindex:=1;
_strres:='';
_cindex:=1;
if _delimeter is null or "character_length"(_debugstr)<1 then
return _arr_str;
end if;
--_strres:=_strres||'原始字串是:'||_originstr;
while _cindex<"length"(_originstr) loop
--_strres :=_strres||'【這個是什麼?】'||split_part(_originstr, _delimeter, _arrindex);
_tmp_str:=split_part(_originstr, _delimeter, _arrindex);
if "character_length"(_tmp_str)<1 then
exit;
end if;
_arr_str:=_arr_str|| _tmp_str;
_arrindex:=_arrindex+1;
end loop;
return _arr_str;
end;
$$ language plpgsql volatile;
強制轉換字串到整數,轉換不成功就返回null
create or replace function convert_to_integer(v_input text)
returns integer as $$
declare v_int_value integer default null;
begin
begin
v_int_value := v_input::integer;
exception when others then
raise notice 'invalid integer value: "%". returning null.', v_input;
return null;
end;
return v_int_value;
end;
$$ language plpgsql volatile;
將字串轉換成為整數陣列,轉換不成功的就用0代替。
【補充】postgresql的陣列是從1開始的,別被坑了。
create or replace function tools_str2intarray(_originstr varchar, _delimeter varchar)
returns int
as$$
declare _arr_res int;
declare _arr_str varchar(800);
declare _arrlength int;
declare _tmpstr varchar(800);
declare _tmpint int;
declare _nowindex int;
declare __index int;
begin
_arr_str:=tools_str2array(_originstr, _delimeter);
_arrlength:=array_length(_arr_str, 1);
if _arrlength<1 then
return _arr_res;
end if;
--raise info '當前陣列:%',_arr_str;
for _nowindex in 1.._arrlength loop
_tmpstr:=_arr_str[_nowindex];
_tmpint:=convert_to_integer(_tmpstr::text);
_arr_res:=_arr_res || coalesce(_tmpint,0);
end loop;
return _arr_res;
end$$ language plpgsql volatile;
將陣列轉換成為字串:
create or replace function tools_stringify(_array int,_delimeter varchar)
returns text
as$$
declare _res text;
declare _arrindex int;
declare _totallength int;
begin
_arrindex:=1;
_totallength:=array_length(_array, 1);
_res:='';
if _array is null then
return '';
end if;
if array_length(_array, 1) <1 then
return '';
end if;
for _arrindex in 1..array_length(_array,1) loop
--raise info '迴圈中:%',_array[_arrindex];
_res:=_res || (_array[_arrindex]);
if _arrindex<_totallength then
_res:=_res || (_delimeter::text);
--raise info '當前res:%',_res;
end if;
end loop;
return _res;
end$$ language plpgsql volatile;
create or replace function tools_stringify(_array varchar,_delimeter varchar)
returns text
as$$
declare _res text;
declare _arrindex int;
declare _totallength int;
begin
_arrindex:=1;
_totallength:=array_length(_array, 1);
_res:='';
if _array is null then
return '';
end if;
if array_length(_array, 1) <1 then
return '';
end if;
for _arrindex in 1..array_length(_array,1) loop
--raise info '迴圈中:%',_array[_arrindex];
_res:=_res || (_array[_arrindex]);
if _arrindex<_totallength then
_res:=_res || (_delimeter::text);
--raise info '當前res:%',_res;
end if;
end loop;
return _res;
end$$ language plpgsql volatile;
postgreSQL常用函式
select coalesce sum duration 0 若sum duration 返回值為空,則為其賦值0 select to date 2013 12 20 yyyy mm dd 字串轉化為date型別 select date 2013 10 28 01 00 interval 50 mi...
postgresql常用函式
create table search.t test 20200108 c id varchar 300 c field varchar 300 insert into search.t test 20200108 values 1 醫療器械類,化妝品類,藥品類,食品類 concat ws第乙個引數...
常用PostgreSQL函式
1.數學函式abs 返回絕對值 pi 返回圓周率值 sqrt 返回非負數的二次方根 mod x,y 返回x被y除 x y 後的餘數,x也可以為小數 ceil x 或 ceiling x 返回不小於x最小整數值 floor x 返回不大於x的最大整數值 round x 返回最接近於x的整數 round...