使用Perl在MySQL中插入日期
我有以下代码:使用Perl在MySQL中插入日期,mysql,perl,date,Mysql,Perl,Date,我有以下代码: my $tdate = $fields[0]; print "$tdate\n"; my $trade_dt=UnixDate($tdate,"%Y-%m-%d"); # my $trade_dt = DATE(\"$tdate\"); print "$trade_dt\n"; my $ins_rec = "INSERT IGNORE INTO $tblname(\`trade_dt\`,\`symbol\`) va +lues (?,?);"; my $st
my $tdate = $fields[0];
print "$tdate\n";
my $trade_dt=UnixDate($tdate,"%Y-%m-%d");
# my $trade_dt = DATE(\"$tdate\");
print "$trade_dt\n";
my $ins_rec = "INSERT IGNORE INTO $tblname(\`trade_dt\`,\`symbol\`) va +lues (?,?);";
my $sth=$dbh->prepare($ins_rec);
$sth->execute($trade_dt,$symbol);
$sth->finish;
当我运行它时,我得到以下消息:
"10/14/2011" Use of uninitialized value $trade_dt in concatenation (.) or string at + Set.data.pl line 42, <FIN> line 1.
“10/14/2011”在+Set.data.pl第42行第1行的串联(.)或字符串中使用未初始化值$trade_dt。
关于如何修复它的任何想法……很明显,它从文件中正确读取了日期,因为print语句显示了从我拥有的csv文件中读取的tdate的正确日期,但转换为trade_dt是不正确的,是吗?似乎
UnixDate()
正在返回unde
,因为它无法解析您给出的日期。我怀疑问题在于您的日期字符串被双引号包围,它们会使解析器失效。去掉引号(使用类似于“$tdate=~s/^”(.*)”$/$1/;
)的方法,看看这是否有帮助。无需在SQL语句中转义反勾号。在带引号的字符串中使用反勾号时,反勾号不是特殊字符。另外,您是否考虑过在数据库交互中使用类似DBIx::Class的东西?这会让你的生活更轻松。