Redshift: - Легко разбить строку через запятую на строки - PullRequest
0 голосов
/ 15 апреля 2020

Чистый / Лучший способ разбить список строк через запятую. Dynami c разделитель

1 Ответ

0 голосов
/ 15 апреля 2020

Вот оно, Наслаждайтесь !!

  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



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...