在Rails 3中,我使用一个SQLite3数据库有以下语句:
word = 'Hello'
word_entry = Word.where("name REGEXP :word", {:word => "[[:<:]]#{word}[[:>:]]"})但是,当在SQLite3下运行这个程序时,我总是会得到:
SQLite3 3::SQLException:没有这样的函数: REGEXP
我在SQLite3文档中看到它确实支持REGEXP函数。在我的档案里,我有行
gem 'sqlite3'我的数据库配置文件如下所示:
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000有什么好主意吗?
决议:我最终找到了这个解决方案。不幸的是,它不适用于Rails 3。因此,为了使用正则表达式,我最终切换到MYSQL而不是SQLite3。
发布于 2011-11-11 03:19:03
我遇到了同样的问题。我使用了解决方案中使用的代码,将其移植到Rails 3+中,并使gem更容易使用。我希望这能帮到你。
发布于 2011-07-27 03:49:39
来自精细手册
REGEXP运算符是regexp()用户函数的特殊语法。默认情况下不定义regexp()用户函数,因此使用REGEXP运算符通常会产生错误消息。如果在运行时添加了一个名为" REGEXP“的应用程序定义的SQL函数,则将调用该函数以实现REGEXP操作符。
因此语法支持REGEXP,但是默认的SQLite库没有为它提供实现。如果您想要或需要这样的东西,您将不得不通过一些C争论来连接您自己的实现。
理由大概是,SQLite用户希望保持SQLite尽可能的小和紧,但是包括一个完整的正则表达式库会增加大多数人不想要的权重。此外,他们必须选择一个正则表达式库,并将其包含在SQLite源代码中,否则他们将不得不忍受libc中每个人的正则表达式支持的变化无常。我不是SQLite开发人员之一,所以这纯粹是猜测。
我猜你可能得用相似与GLOB了。使用LIKE将提供一个更可移植的解决方案。
发布于 2012-12-27 16:29:25
您可能会在sqlite3-pcre包中进行测试,该包为SQLite实现了REGEXP。
关于类似的问题,请参见这句话。
https://stackoverflow.com/questions/6839204
复制相似问题