简体   繁体   English

Redshift:- 易于将逗号分隔的字符串拆分为行

[英]Redshift :- Easy to split comma separated string into rows

Clean/Best way to split a comma-separated list of string into rows.将逗号分隔的字符串列表拆分为行的干净/最佳方法。 Dynamic delimiter动态分隔符

Here it is, Enjoy!!在这里,享受!

  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;

Usage Example:-用法示例:-

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



声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM