SQL排除regexp不起作用,为什么?

时间:2013-02-28 11:40:35

标签: sql regex oracle

我在db中有一些句子。我想选择那些没有网址的网站。

所以我做的是

select ID, SENTENCE
from SENTENCE_TABLE
where regexp_like(SENTENCE, '[^http]');

但是,在执行查询后,结果窗格中显示的句子仍然具有URL。我尝试了很多其他组合而没有任何成功。 有人可以解释或提供良好的链接,其中解释了regexp在SQL中的实际工作方式。

如何使用SQL查询过滤(排除)db中的实际单词?

2 个答案:

答案 0 :(得分:4)

你过于复杂了。只需使用标准LIKE

select ID, SENTENCE
  from SENTENCE_TABLE
  where SENTENCE not like '%http%';

regexp_like(SENTENCE, '[^http]')将匹配所有 h,t和p分别匹配。我喜欢Oracle中正则表达式的PSOUG page,但我也建议阅读the documentation

要回复您的评论,可以使用REGEXP_LIKE,这一点毫无意义。

select ID, SENTENCE
  from SENTENCE_TABLE
 where not regexp_like(SENTENCE, 'http');

这会查找字符串http而不是单独的字母。

答案 1 :(得分:3)

[^http]会匹配除h t t p ..因此,这将匹配任何不包含h t {{1}的字符串 t字符串

中的任何位置

它应该是p ..这将匹配任何不以http

开头的东西