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 :- 易于将逗号分隔的字符串拆分为行的主要内容,如果未能解决你的问题,请参考以下文章

将逗号分隔的字符串拆分为 R 中定义的数量

如何将逗号分隔的字符串拆分为字符串列表?

将逗号分隔的字符串拆分为mysql中的行

从逗号分隔的字符串中删除重复项 (Amazon Redshift)

如何将逗号分隔的值拆分为列

如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?