postgresql 常用小函式

2021-06-20 03:43:20 字數 4145 閱讀 6997

將字串按照分隔符劃分成為陣列:

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...