简体   繁体   中英

SPLIT_PART() entire column in redshift

How do I split_part an entire column(word-by-word)? I am trying to split the column "answer" into each word.

eg this is my dataset:

name answer
Kate i love cheese
Tom i love bacon & eggs

this is what i want:

name split_answer
Kate i
Kate love
Kate cheese
Tom i
Tom love
Tom bacon
Tom &
Tom eggs

this is my query:

SELECT name, split_part(answer, ' ') AS split_asnwer FROM table

Split_part() can take 3 arguments - string, delimiter, and part number.

So you need to cross join with a numbers table that has all the integer values from 1 to the max number of parts in any string. You can generate this numbers table with a recursive CTE or some like to just have a numbers table on hand.

The query will look something like (untested and off the cuff):

with recursive nums(n) as (
  select 1 as n
  union all
  select n + 1 
  from nums 
  where n < (select max(LEN(answer) - LEN(REPLACE(answer, ' ', '')) + 1) from table)
)
select name, split_part(answer, ' ', n) AS split_answer 
FROM table
cross join nums
where split_answer <> '';

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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