機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

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などに移行するってのが一番かなと思います。

この記事で欲しい情報が見つからなかった方へ

この記事の更新情報がある場合があります。
この記事は以下の記事とも関連性があると思われます。

AtomでAND検索する正規表現パターンを考えた
複数ディレクトリで文字列を正規表現で検索する
Railsで正規表現置換ツールを作成する
atom: 正規表現をグラフィカルに表示する
JavaScript: 正規表現 置換/真偽値/match
Sqlite3でDATETIMEに合う現在時刻をINSERTするには
DB Browser for SQLite / Sqlite3データベースの中身を確認/編集できるビュワー


管理人の方針で、既存の記事の編集はせず、新しい情報や大きな既存情報の更新があった場合には、新しい記事として公開することになっています。
当記事で欲しい情報が見つからなかった・解決に至らなかった場合、これらのリンクがお役に立てるかも知れません。

どうやってこの関連記事を生成しているの?
この機能のPHPソースコード(2500行)

コメントを残す

Close Menu