我有一个mySQL数据库设置和一个“联系”表,其中包含多个字段,用于显示不同的联系信息。这让我感到困惑,但我想由于某些原因,客户在添加到数据库时并不总是将他们的电子邮件信息放在“电子邮件”字段中。是否有一种快速简便的方法来搜索每个记录中每个字段的“@”符号?如果没有,有人可以帮我扯掉perl行或脚本,只在txt文件中留下带有'@'的字符串吗?我计划在其他方面调查perl进行数据按摩,但我现在没有时间。谢谢!
-Austin
答案 0 :(得分: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子句的完整列列表。
答案 1 :(得分: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;
}