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

PostgreSQL自作関数

説明

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

 

引数

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

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

引数3(character varying):挿入する文字列

 

返り値

値を挿入した後の配列

 

コード

CREATE OR REPLACE FUNCTION insert_into_array_char(
    character varying[],
    numeric,
    character varying)
  RETURNS character varying[] 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	character varying[];
	
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_char(character varying[], numeric, character varying)
  OWNER TO postgres;

※PostgreSQL12で動作確認済み

 

実行例

select * from insert_into_array_char(array['A','B','C','D','E','F'],3,'Z')
--{A,B,Z,C,D,E,F}