2012-11-18 51 views
0

我有一個sqlite3的表與名稱標題,其中存儲了一些電影的名稱列。如何清理數據的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 blanca VS "Casablanca" (1983) {The Cashier and the Belly Dancer (#1.4)}),都存儲有額外的文本。

我想要做的是消毒兩列已存儲的數據。通過消毒,我想帶的單元格的內容:1。 空間 2. SPL字符一樣,」,」,逗號等。 3.全部轉換爲小寫

我希望與至少在兩個列之間可以有一定程度的匹配

我的問題是,我如何對已存儲在sqlite表中的數據執行這些清理操作,我沒有在加載之前進行清理的選項,因爲我只能訪問裝載的數據庫。

我使用SQLite 3.7.13,而我使用SQLite Manager作爲GUI。

謝謝。

回答

1

這個任務太專業化是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(); 
+0

謝謝!謝謝!謝謝!謝謝!謝謝! – kallakafar

+1

順便說一句,接受和/或提出你喜歡的或解決你的問題的答案(和問題)被認爲是好主意。這將增加有人會麻煩回答你的問題的機會。這就是這個網站的工作原理 – mvp