DBD::SQLiteでREGEXP演算子を使うメモ
UDFにしないといけない。UTF-8決めうちにしてるけど、SQLiteで日本語使うのに他の文字コード使う理由もそうないだろうし、別にいいよね。
use DBI; use Encode qw/decode/; my $dbh = DBI->connect('dbi:SQLite:dbname=sqlite3.db', '', '') or die $!; $dbh->func('regexp', 2, sub { my ($pattern, $target) = @_; if ($target) { # utf-8 octetsからutf-8 strにしておく。 # これやっておかないと"."が日本語1文字にマッチしない。'あ' !~ /^.$/ # こんなの書きたくないよねってこと。'あ' =~ /^...$/ $_ = Encode::decode 'utf-8', $_ for $target, $pattern; $target =~ m/$pattern/; } else { return } }, 'create_function'); my $sth = $dbh->prepare(q"SELECT * FROM tbl WHERE col REGEXP '^pat'");
効率? 今回は全データ読んでもたかだか数万件しかなくて、なんならいったん全データ引っ張ってきてPerl側で絞ってもいいから考えてないです><