首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQLite3和Rails 3.1中打开REGEXP?

如何在SQLite3和Rails 3.1中打开REGEXP?
EN

Stack Overflow用户
提问于 2011-07-27 03:37:21
回答 6查看 10.6K关注 0票数 10

在Rails 3中,我使用一个SQLite3数据库有以下语句:

代码语言:javascript
复制
word = 'Hello'
word_entry = Word.where("name REGEXP :word", {:word => "[[:<:]]#{word}[[:>:]]"})

但是,当在SQLite3下运行这个程序时,我总是会得到:

SQLite3 3::SQLException:没有这样的函数: REGEXP

我在SQLite3文档中看到它确实支持REGEXP函数。在我的档案里,我有行

代码语言:javascript
复制
gem 'sqlite3'

我的数据库配置文件如下所示:

代码语言:javascript
复制
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

有什么好主意吗?

决议:我最终找到了这个解决方案。不幸的是,它不适用于Rails 3。因此,为了使用正则表达式,我最终切换到MYSQL而不是SQLite3。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-11 03:19:03

我遇到了同样的问题。我使用了解决方案中使用的代码,将其移植到Rails 3+中,并使gem更容易使用。我希望这能帮到你。

雷杰普

票数 15
EN

Stack Overflow用户

发布于 2011-07-27 03:49:39

来自精细手册

REGEXP运算符是regexp()用户函数的特殊语法。默认情况下不定义regexp()用户函数,因此使用REGEXP运算符通常会产生错误消息。如果在运行时添加了一个名为" REGEXP“的应用程序定义的SQL函数,则将调用该函数以实现REGEXP操作符。

因此语法支持REGEXP,但是默认的SQLite库没有为它提供实现。如果您想要或需要这样的东西,您将不得不通过一些C争论来连接您自己的实现。

理由大概是,SQLite用户希望保持SQLite尽可能的小和紧,但是包括一个完整的正则表达式库会增加大多数人不想要的权重。此外,他们必须选择一个正则表达式库,并将其包含在SQLite源代码中,否则他们将不得不忍受libc中每个人的正则表达式支持的变化无常。我不是SQLite开发人员之一,所以这纯粹是猜测。

我猜你可能得用相似与GLOB了。使用LIKE将提供一个更可移植的解决方案。

票数 8
EN

Stack Overflow用户

发布于 2012-12-27 16:29:25

您可能会在sqlite3-pcre包中进行测试,该包为SQLite实现了REGEXP

关于类似的问题,请参见这句话

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6839204

复制
相关文章

相似问题

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