SQlite3では正規表現(REGEXP)が使用できない??

    >

Rails5のactiveRecordで正規表現を使用したSQLを実行しようとすると、エラーになります。

sqlite> SELECT "notes".* FROM "notes" WHERE content REGEXP 'hoge' ;
Error: no such function: REGEXP

activeRecordでも同様です。

[13] pry(main)> Note.all
...
#<Note:0x000055701e73c740 id: 9, title: "dev", content: "hogefuga", user_id: 3, created_at: Sat, 28 Jul 2018 23:27:58 UTC +00:00, updated_at: Sat, 28 Jul 2018 23:27:58 UTC +00:00>,
#<Note:0x000055701e73c560 id: 10, title: "dev_", content: "hogehoge", user_id: 3, created_at: Sat, 28 Jul 2018 23:28:21 UTC +00:00, updated_at: Sat, 28 Jul 2018 23:28:21 UTC +00:00>]

# 一見出来ているように見える
[14] pry(main)> Note.where("content REGEXP ?", 'hoge')
  Note Load (0.3ms)  SELECT "notes".* FROM "notes" WHERE (content REGEXP 'hoge')
  Note Load (0.3ms)  SELECT  "notes".* FROM "notes" WHERE (content REGEXP 'hoge') LIMIT ?  [["LIMIT", 11]]
=> #<Note::ActiveRecord_Relation:0x3ff536212788>

# しかし取得できていない
[15] pry(main)> Note.where("content REGEXP ?", 'hoge')[0]
  Note Load (0.3ms)  SELECT "notes".* FROM "notes" WHERE (content REGEXP 'hoge')
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such function: REGEXP: SELECT "notes".* FROM "notes" WHERE (content REGEXP 'hoge')
from /home/yuis/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `initialize'

で、調べると、どうも情報が錯綜してて…。

まとめると、

見事に分かりませんね。

何がどうなってるんだか…。

解決策としては、やはり、どうしてもLIKE検索とかREGEXPを使いたいなら、SQliteからmysqlなどに移行するってのが一番かなと思います。


お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


関連するかもしれない記事

Perlで改行あり複数行(multiline)を正規表現置換する
jQuery x list.jsで正規表現検索できて並び替えもできるHTMLテーブルを作る
vimで正規表現検索する
JavaScriptの正規表現マッチでグループマッチを取り出すには
SQLでWordPressの記事を正規表現検索してMarkDown形式にする – 簡単にWordPressブログの記事リンクを取得する方法
AtomでAND検索する正規表現パターンを考えた
複数ディレクトリで文字列を正規表現で検索する


Close Menu