使用正则表达式的SQLite查询

4
我正在使用Java,并且有一个数据库SQLite 3.8.5,其中有2列,ID (int key)note (string)。我想能够查询包含多个单词的所有笔记。
例如: Note1:“Hello,this movie is foo” Note2:“Hello,this movie is yellow” Note3:“Hello,foo this movie is”(Yoda,不要打字!) 给定用户过滤词:“foo”“movie”
查询结果应该是Note1和Note2。
这个正则表达式可以工作,但我似乎找不到如何将正则表达式作为查询:.*(?=.*movie)(?=.*foo).* 敬礼
2个回答

9
除了上面的答案之外,以下是Java的解决方案,为了完整起见。您需要对每个连接执行此操作,以使REGEXP运算符正常工作。
// Create regexp() function to make the REGEXP operator available
Function.create(connection, "REGEXP", new Function() {
  @Override
  protected void xFunc() throws SQLException {
    String expression = value_text(0);
    String value = value_text(1);
    if (value == null)
      value = "";

    Pattern pattern=Pattern.compile(expression);
    result(pattern.matcher(value).find() ? 1 : 0);
  }
});

1
SQLite有一个REGEXP操作符,用于比较值。问题是,默认情况下SQLite不提供正则表达式比较的实现,因此您需要提供一种实现方式。这可以通过实现regexp()自定义SQL函数来完成。
要了解如何实现自定义SQL函数,请参见:使用Java或Groovy编写SQLite用户定义的SQL函数? 换句话说,您需要告诉SQLite它应该如何执行正则表达式匹配,通过提供执行此任务的Java函数。
一旦您实现了regexp函数,就可以在SQL查询中开始使用REGEXP操作符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接