首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除某些字符串,同时使用RLIKE包含其他字符串

排除某些字符串,同时使用RLIKE包含其他字符串
EN

Stack Overflow用户
提问于 2021-03-22 18:55:48
回答 1查看 55关注 0票数 0

我正在处理一个Snowflake查询,它使用RLIKE函数在文本块中查找特定的单词。这是我的查询的简化版本:

代码语言:javascript
复制
SELECT id FROM table WHERE RLIKE (text,'.* red .*|.* green .*|.* blue .*','i')

我要查询的表的一些示例:

第1行: id = 1,text =‘表是红色的,很漂亮’

第2行: id = 2,text =‘花园里有一朵红玫瑰’

第3行: id = 3,text =‘我在绿色的花园里看到一朵红玫瑰’

此时,查询将返回表中的所有3行。我想要做的是从结果中排除某个单词组合。在这个例子中,我想从结果中排除“红玫瑰”,但前提是文本中没有来自RLIKE列表的其他单词。

所以在我的结果中,ID1应该包括在内(‘红色’本身必须包括在内),ID2应该排除(‘红玫瑰’组合,文本中没有其他颜色)和ID3应该包括(即使它有‘红玫瑰’,它也有‘绿色’,所以应该包括在内)。

有没有办法做到这一点?提前感谢您的帮助

编辑:只是为了澄清,我也想在我的结果中看到像“红色花园中的红玫瑰”这样的东西,因为“红色”只出现在那里一次,而不是在“玫瑰”旁边。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-22 19:00:11

嗯。。。以下内容可能足以满足您的需求,并且它不使用正则表达式:

代码语言:javascript
复制
SELECT id
FROM table
WHERE text like '% green %' or
      text like '% blue %' or
      (text like '% red %' and text not like '% red rose %');

这适用于您的样本数据。但它不会返回“红色花园中的红玫瑰”。我不确定你想不想要。

如果您希望该行也出现,那么有一种方法是:

代码语言:javascript
复制
SELECT id
FROM table
WHERE text like '% green %' or
      text like '% blue %' or
      replace(text, 'red rose', '') like '% red %' ;

您可以使用具有相同逻辑的rlike()

代码语言:javascript
复制
WHERE rlike(replace(text, 'red rose', ''), ' red | green | blue ')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66744663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档