Redshift :- 易于将逗号分隔的字符串拆分为行
Posted
技术标签:
【中文标题】Redshift :- 易于将逗号分隔的字符串拆分为行【英文标题】:Redshift :- Easy to split comma separated string into rows 【发布时间】:2020-04-15 14:53:36 【问题描述】:将逗号分隔的字符串列表拆分为行的干净/最佳方式。 动态分隔符
【问题讨论】:
【参考方案1】:在这里,享受吧!
CREATE OR REPLACE PROCEDURE public.sp_string_split( "string" VARCHAR(MAX), "delimiter" char)
AS $$
DECLARE
delimeter char := ',';
cnt INTEGER := 1;
no_of_parts INTEGER := 0;
sql VARCHAR(MAX) := '';
item character varying := '';
BEGIN
IF LEN("delimiter") != 0 THEN
delimeter = "delimiter" ;
END IF;
--RAISE NOTICE 'using %', delimeter ;
no_of_parts = (SELECT LENGTH(string) - LENGTH(REPLACE(string, delimeter,'')));
--RAISE NOTICE 'parts length sql %', no_of_parts ;
-- drop table
sql := 'DROP TABLE IF EXISTS split_table;';
--RAISE NOTICE 'executing sql %', sql ;
EXECUTE sql;
-- Create table
sql := 'CREATE TEMPORARY TABLE IF NOT EXISTS split_table (part VARCHAR(255));';
--RAISE NOTICE 'executing sql %', sql ;
EXECUTE sql;
<<simple_loop_exit_continue>>
LOOP
item = (select split_part("string",delimeter,cnt));
--RAISE NOTICE 'item %', item ;
sql := 'INSERT INTO split_table SELECT '''||item||''' ;';
EXECUTE sql;
cnt = cnt + 1;
EXIT simple_loop_exit_continue WHEN (cnt >= no_of_parts + 2);
END LOOP;
END ;
$$ LANGUAGE plpgsql;
用法示例:-
-- Example 1
call public.sp_string_split('john,smith,jones', ',');
select *
from split_table
-- Example 2
call public.sp_string_split('john|smith|jones', '|');
select *
from split_table
【讨论】:
以上是关于Redshift :- 易于将逗号分隔的字符串拆分为行的主要内容,如果未能解决你的问题,请参考以下文章