【问题标题】:search for the presence of two strings in oracle database in a clob column?在 clob 列中搜索 oracle 数据库中是否存在两个字符串?
【发布时间】:2018-10-25 14:43:00
【问题描述】:

我有一个带有长字符串的 clob 列。

比如“今天做得很好。很好”

我想检索所有包含 great 和 good 两个词的记录。

两个位置都不固定。

【问题讨论】:

  • 那么您是否想要一个与“我的天哪!我不知道老詹金斯在牛津读过Greats”的解决方案。 ?
  • 请检查我的答案,如果您认为它适合您或提供相关反馈,请接受该答案。请阅读:stackoverflow.com/help/someone-answers 了解为什么它很重要。

标签: sql oracle oracle-sqldeveloper clob


【解决方案1】:

目前尚不清楚“兼具伟大和好”这两个词的实际含义。

如果您的意思是要检查字符串是否具有两种单词模式,那么它很简单

where lower(col) like '%good%' AND lower(col) like '%great%'

如果您的意思是它们应该包含真正的单词 good 和 great,那么对于更简单的情况,应该这样做

where ' ' || lower(col) || ' ' LIKE '% good %' AND ' ' || lower(col) || ' ' LIKE '% great %'

但是,这不会匹配以单词结尾并带有句号的句子。如果您想简单地使用LIKE 来处理此类情况,它会变得很长。

REGEXP 函数提供更大的灵活性,但性能可能较差。

WHERE REGEXP_LIKE ( s, '(^|\W)good(\W|$|\.)') AND REGEXP_LIKE ( s, '(^|\W)great(\W|$|\.)')

这将搜索单词边界,即由非单词字符包围的单词以及包含结束点的开头和结尾。如果您想忽略大小写,请将,'i' 添加为第三个参数。

【讨论】:

  • 我认为很明显 OP 想要列包含两个字符串的行。因此,无论我们采取正确解决方案的任何方法,都必须是布尔值 and 而不是 or
【解决方案2】:

我认为这是你想要的基本逻辑:

where lower(col) like '%good%' and lower(col) like '%great%'

在 clob 中,你不能完全使用 like

where dbms_lob.instr(col, 'good') and dbms_log.instr(col, 'great')

【讨论】:

    【解决方案3】:

    试试这个,让我知道它是否适合你。

    SELECT *
    FROM clob_table
    WHERE DBMS_LOB.INSTR(clob_text,'great')>0 
          AND DBMS_LOB.INSTR(clob_text,'good')>0;
    

    请记住输入表和列的名称。

    这是我的结果,

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2010-11-11
      • 2013-05-29
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多