0

一部の映画の名前を格納する、タイトルという名前の列を持つ sqlite3 テーブルがあります。

Table name - table1
Column name - Title
Examples data: "Casablanca" (1983) {The Cashier and the Belly Dancer (#1.4)}

映画のタイトルを格納する列を持つ別の sqlite3 テーブルがあります。

Table name - table2
Column name - Title
Examples data: casa blanca

これらのテーブルはどちらも異なるデータセットを使用して作成されたもので、ムービー名は同じ ( casa blancavs "Casablanca" (1983) {The Cashier and the Belly Dancer (#1.4)}) ですが、どちらも追加のテキストと共に保存されています。

私がやりたいことは、両方の列に既に保存されているデータをサニタイズすることです。サニタイズによって、次のセルの内容を削除したいと思います: 1. スペース 2. !、'、"、コンマなどの spl 文字。 3. すべて小文字に変換

両方の列の間で少なくともある程度の一致が得られることを願っています。

私の質問は、sqlite テーブルに既に格納されているデータに対してこれらのサニタイズを実行するにはどうすればよいかということです。ロードされたデータベースにしかアクセスできないため、ロードする前にサニタイズするオプションはありません。

私はsqlite 3.7.13を使用しており、sqliteマネージャーをGUIとして使用しています。

ありがとうございました。

4

1 に答える 1

2

このタスクは特殊すぎて、SQL だけで行うことはできません。

テーブルをスキャンし、データを行ごとに読み取り、要件を満たすようにスクラブして書き戻す単純な Perl または Python スクリプトを作成する必要があります。

これは Perl での例です:

use DBI;
my $dbh = DBI->connect("dbi:mysql:database=my.db");
# replace rowid with your primary key, but it should work as is:
my $sth = $dbh->prepare(qq{
    SELECT rowid,*
    FROM table1
});
while (my $row = $sth->fetchrow_hashref()) {
    my $rowid = $row->{rowid};
    my $title = $row->{title};
    # sanitize title:
    $title = lc($title); # convert to lowercase
    $title =~ s/,//g;    # remove commas
    # do more sanitization as you wish
    # ...
    # write it back to database:
    $dbh->do(
         qq{
             UPDATE table1
             SET title = ?
             WHERE rowid = ?
         }, undef,
         $title,
         $rowid,
    );
}
$sth->finish();
$dbh->disconnect();
于 2012-11-18T14:22:25.567 に答える