redshift sql从句子字符串中删除给定列表中的所有单词

时间:2018-03-10 07:55:37

标签: sql string replace amazon-redshift

我有一个包含聊天消息的红移表,每行包含:timestampuser_idmsg_body

我还有一个“坏”的列表。单词bad_words包含200多个单词。

每个msg_body都有由一堆字组成的聊天消息,其中一些可能不好。我想从msg_body中的每个bad_words个字词中删除所有出现的字词,并用空字符串替换并保存在新列new_body中。

这是一些描述我想做的非工作伪代码:

select timestamp, user_id, mgs_body, 
   case when (body SIMILAR TO (select distinct words from bad_words) 
        then (do something like replace(body,badword,'')) end as new_body 
from chat_messages 

1 个答案:

答案 0 :(得分:2)

一种选择是使用regexp_replace

使用list_agg

构建一个匹配所有错误字词的模式,例如'\b(very bad|word|not-good)\b'
WITH re AS (SELECT '\b(' || LISTAGG(DISTINCT words, '|') || ')\b' pattern FROM bad_words)
SELECT
    timestamp
  , user_id
  , body
  , REGEXP_REPLACE(body, re.pattern, '') new_body
FROM chat_messages, re