概要
SQLにて、あいまい検索をするときには、一般的にはLIKE演算子を使用して
SELECT * FROM TABLE_NAME WHERE NAME LIKE '%たなか%"
のように書きます。
FlutterのSQLiteでも同様にLIKE演算子が使えるのですが、使い方にちょっとした落とし穴があるので以下記しておこうと思います。
使用環境
Flutter 2.0.6
SQLite 1.3.0
うまく動かなかった書き方
変数searchに入っている文字列がカラムhonbunに含まれるレコードを取得しようと、
このようにLIKE演算子と%を書いたのですが、検索に引っかかりませんでした。
final rows = await dbProvider.db.rawQuery( "SELECT * FROM $table_name WHERE honbun LIKE '%?%' ORDER BY currentDate", ['search']);
うまく動いた書き方
しかし、stackoverflowに書いてある以下の書き方に直したら、なぜかうまく検索できてしまいました。
final rows = await dbProvider.db.rawQuery( "SELECT * FROM $table_name WHERE honbun LIKE ? ORDER BY currentDate", ['%$search%']);
?の部分に検索文字列だけ引き渡すのではなく%演算子を挟んだ状態の値を引き渡すとうまくいきました。
なんだか納得がいきません。。。
参考リンク
Flutterを学ぶなら世界最大級のオンライン学習サイトUdemyがおすすめ
Flutterを学ぶなら、世界最大級のオンライン学習サイトUdemy
がおすすめです。
通常ですと、各コース2万円程度するのですが、年がら年中割引セールスを行なっており、割引後価格はなんとおおむね1500円程度で受講することができます。
今すぐ受講しなくても、安い時に大量に買っておいて、あとでじっくり勉強するのがかしこいやり方だと思います。