SQL:使用 REGEXP_REPLACE 删除表的另一列中的部分字符串

Posted

技术标签:

【中文标题】SQL:使用 REGEXP_REPLACE 删除表的另一列中的部分字符串【英文标题】:SQL: Remove part of string that is in another column of the table using REGEXP_REPLACE 【发布时间】:2020-10-12 18:28:38 【问题描述】:

我有一列看起来像这样,但行数更多:

| CatName  | Message                                      | 
| Garfield | You are a great cat Garfield                 | 
| Goofy    | I do not like Goofy, he is a mediocre cat    | 
| RoseMary | You are a great cat RoseMary                 | 
| Joe      | Joe, you are like a ferocious lion!          |
| Astrid   | Cat food is tasty                            | 

现在,我正在尝试从表中每一行的消息中删除猫的名称,以便我可以看到发送给每只猫的消息是什么,以及哪些猫收到了相同的消息(即这样我会能够看到加菲猫和罗斯玛丽收到了相同的信息)。

SELECT 
  Message,
  CatName,
  REGEXP_REPLACE(Message, '^' || CatName, '') msg_no_name
FROM cat_table

我试图用 regexp_replace 来解决这个问题(我想用任何内容替换每条消息的 CatName 部分——但我认为我弄错了*。任何人都可以看到我出错的地方,或者有更好的建议我该如何解决这个问题?

BigQuery 抛出此错误:无法解析正则表达式:错误的重复运算符:???

【问题讨论】:

【参考方案1】:

为什么不直接使用replace()

select replace(message, catname, '')

【讨论】:

哦。谢谢你。这更有意义!因为我是 SQL 初学者,所以我把事情复杂化/谷歌搜索错误。 :)

以上是关于SQL:使用 REGEXP_REPLACE 删除表的另一列中的部分字符串的主要内容,如果未能解决你的问题,请参考以下文章

将 regexp_replace 连接到 listagg:结果太长(SQL 错误:ORA-01489)

Hive SQL 查询中 Regexp_replace 的奇怪行为

Oracle SQL REGEXP_REPLACE - 除指定字符串外的所有内容

Hive regexp_replace 无法替换反斜杠

如何在 Oracle 中使用 REGEXP_REPLACE 删除单词

如何在 Hive 中使用 regexp_replace() 一次删除多个字符?