0

我有一个 sqlite3 表,其中有一列名为 Title,它存储了一些电影的名称。

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 manager 作为 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 回答