在列中找到精确匹配项时,如何在Oracle SQL中附加特殊字符

在列中找到精确匹配项时,如何在Oracle SQL中附加特殊字符,oracle,Oracle,表详细信息-有两列ID和MSG\u INFO ID - 1; MSG_INFO Party is carrying gold in a car which is made of gold ID - 2; MSG_INFO Party is carrying whitegold in a car which made of gold 我想写一个查询,如果我在MSG_INFO列中搜索gold,并且如果存在精确匹配,那么我将~附加到gold,并且在没有精确匹配时不执行任何操作 预期产量 ID -1

表详细信息-有两列
ID
MSG\u INFO

ID - 1; MSG_INFO Party is carrying gold in a car which is made of gold

ID - 2; MSG_INFO Party is carrying whitegold in a car which made of gold
我想写一个查询,如果我在MSG_INFO列中搜索gold,并且如果存在精确匹配,那么我将~附加到gold,并且在没有精确匹配时不执行任何操作

预期产量

ID -1 ; MSG_INFO Party is carrying ~gold in a car which is made of ~gold
ID -2 ; MSG_INFO Party is carrying whitegold in a car which made of ~gold

在Oracle
REGEXP
中,没有匹配单词边界的
\b
模式。一个常用的解决方案是这样的

SELECT id,
       REGEXP_REPLACE (msg_info, '(^|\s|\W)(gold)($|\s|\W)', '\1~\2\3', 1,0,'i')
FROM   yourtable;  


这将在字符串的开始处搜索单词gold,并在字符串的两侧、结尾或非单词字符(如?或-)包围<代码>\1、\2、\3表示第一、第二和第三个括号内匹配的字符

您可以使用替换功能。下面是示例查询

SELECT REPLACE('gold a gold a  agold  ggolg', ' gold ', '~gold')
  FROM dual;
在您的情况下,查询可能是

SELECT id, REPLACE(msg_info, ' gold ', '~gold')
  FROM your_table;

注意:在第二个参数中,您是否可以放置空格,这取决于您。此外,您还可以在internet上查找替换功能的更多详细信息。

您需要更具体一些-您所说的“精确匹配”是什么意思?您是指金色字母,前面是非字母(或在邮件开头),后面是非字母(或邮件结尾)?如果没有,还有什么?另外-Gold是否匹配(大写)?精确匹配是指单词Gold前面有一个非字母,后面有一个非字母。它可以大写为Gold或Gold。如果匹配,则在单词前面添加~。我们可以重新构造查询,从何处获取计数,以检查精确匹配发生了多少次,以及部分匹配发生了多少次。@user3442679:为此,您可以尝试
REGEXP\u count
。如果你在获取结果时遇到困难,你可以随时在这里发布这样一个问题。你能帮我在上面的查询中找到一个匹配项吗,只有制表符和逗号,没有其他内容。@user3442679:如果您想快速找到解决方案,您可以单独提问,因为我可能需要一些时间才能回来。如果您的答案需要一些调整,请开始新的问题。你能帮我一下吗