我有一个包含聊天消息的红移表,每行包含:timestamp
,user_id
,msg_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
答案 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