【PostgreSQL】配列の指定箇所に値を入れる(数値)

2020年11月13日PostgreSQL自作関数

スポンサーリンク

配列の指定箇所に値を入れる関数

配列の指定箇所に値を入れる(数値)

 

引数

引数1(character varying[]):挿入する配列

引数2(numeric):挿入する場所(1からカウント)

引数3(character varying):挿入する数値

 

返り値

値を挿入した後の配列

 

コード

CREATE OR REPLACE FUNCTION insert_into_array_num(
    numeric[],
    numeric,
    numeric)
  RETURNS numeric[] AS
$BODY$
declare
 
	a_array	        alias for $1; 	--引数1:挿入する配列
	insert_pos      alias for $2; 	--引数2:挿入する場所(1からカウント)
	c_insert_char	alias for $3; 	--引数3:挿入する数値

	return_array	numeric[];
	
begin

  
	for temp_count in 1..array_length(a_array,1)
	loop
		--返り値用の配列に値をセット
		if temp_count < insert_pos then
			--ループカウント < 引数2(insert_pos)の時、元の配列の値をセット return_array[temp_count] = a_array[temp_count]; end if; if temp_count = insert_pos then --ループカウント = 引数2(insert_pos)の時、引数3(挿入する文字列)をセット return_array[temp_count] = c_insert_char; end if; if temp_count > insert_pos then
			--ループカウント > 引数2(insert_pos)の時、元の配列の値(配列の添え字は-1)をセット
			return_array[temp_count] = a_array[temp_count -1] ;
		end if;

		if temp_count = array_length(a_array,1) then
			--最後に元の配列の最後の値をセット
			return_array[temp_count +1 ] = a_array[temp_count];
		end if;
	
	end loop;

	
	return return_array;
 
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION insert_into_array_num(numeric[], numeric, numeric)
  OWNER TO postgres;

 

実行例

--配列[123,234,345,456,567]の3番目に999を入れる
select * from insert_into_array_num(array[123,234,345,456,567],3,999)
--{123,234,999,345,456,567}