1

mySQL データベースをセットアップし、さまざまな連絡先情報用の複数のフィールドを持つ「連絡先」テーブルを用意しています。それは私には困惑していますが、何らかの理由で、DBに追加するときにクライアントが常に電子メール情報を「電子メール」フィールドに入れるとは限らないと思います。すべてのレコードのすべてのフィールドで「@」記号をすばやく簡単に検索する方法はありますか? そうでない場合、誰かが txt ファイルに「@」を含む文字列のみを残すように perl の行またはスクリプトを作成するのを手伝ってくれますか? とりわけデータ マッサージのために perl を検討する予定ですが、今は時間がありません。ありがとう!

-オースティン

4

2 に答える 2

0

できる列ごとに

SELECT * FROM table WHERE col1 LIKE '%@%' OR col2 LIKE '%@%' OR .... 

メール列を省略していることを確認してください。間違った列にメールが含まれている可能性のある行だけが取得されます。

これは多くの列を持つテーブルであり、これが説明されているアプローチの障害であるという情報を含めたので、mysql のデータ ディクショナリを使用して、テーブルの列名のリストを生成できます。

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='your_database' AND TABLE_NAME='your_table' AND COLUMN_NAME != 'email';  

列名があれば、マクロをサポートするエディターを使用して、それを使用して OR 句の列の完全なリストを数分で作成するのは簡単です。

于 2013-09-26T21:07:19.397 に答える
0

これはすべての行を反復し、一部の列に含まれる場合に結果をファイルに保存します@

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use DBI;

my $dbh = DBI->connect('dbi:mysql:db_name','user','pass')
  or die "Connection Error: $DBI::errstr\n";

my $sql = "select * from table";
my $sth = $dbh->prepare($sql);
$sth->execute or die "SQL Error: $DBI::errstr\n";

open my $fh, ">", "output.txt" or die $!;

while (my $r = $sth->fetchrow_hashref) {
  $r->{$_} =~ /@/ and print $fh "Found '@' in column $_ of row:", Dumper $r
    for keys %$r;
}
于 2013-09-27T11:48:54.960 に答える