How to turn on REGEXP in SQLite3 and Rails 3.1?

后端 未结 6 1927
谎友^
谎友^ 2020-12-11 16:28

I have the following statement in Rails 3 using an SQLite3 database:

word = \'Hello\'
word_entry = Word.where(\"name REGEXP :word\", {:word => \"[[:<:]         


        
6条回答
  •  误落风尘
    2020-12-11 17:08

    From the fine manual:

    The REGEXP operator is a special syntax for the regexp() user function. No regexp() user function is defined by default and so use of the REGEXP operator will normally result in an error message. If a application-defined SQL function named "regexp" is added at run-time, that function will be called in order to implement the REGEXP operator.

    So the grammar supports REGEXP but the default SQLite library does not provide an implementation for it. You'll have to hook up your own implementation through some C wrangling if you want or need such a thing.

    Presumably the rationale is that the SQLite people want to keep SQLite as small and tight as possible but including a whole regular expression library would add weight that most people don't want. Also, they would have to choose a regular expression library and include it with the SQLite source or they'd have to put up with the vagaries of everyone's regular expression support in libc. I'm not one of the SQLite developers so this is pure speculation.

    I'm guessing that you'll probably have to make do with LIKE and GLOB. Using LIKE will provide a more portable solution.

提交回复
热议问题