【发布时间】:2012-02-17 01:41:40
【问题描述】:
我在我的 perl 文件中运行以下代码:
LOAD DATA INFILE 'file_name'
INTO TABLE tbl_name
FIELDS TERMINATED BY ','
(columns..., @var, morecolumns...)
SET datecolumn = str_to_date(@var, '%d/%m/%Y');
我有两个问题:
-
当我运行 perl 文件时,我收到以下错误。这是否意味着我必须在数据库中的表中添加一个字段“var”?
全局符号“@var”在 process.pl 第 37 行需要明确的包名称。 由于编译错误,process.pl 的执行被中止。
如果出于任何原因我必须重新加载 .csv 文件中的数据并再次运行此命令,它会将新记录添加为重复项。如何编辑上述代码以避免重复记录?
更新了 Perl 的相关代码:
my $sql = "LOAD DATA LOCAL INFILE '$fname' INTO TABLE $tname FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' (trade_dt,t_id,....open_int);";
print $sql,"\n"; #date is going in as '0000-00-00'
$dbh->do($sql) or die $dbh->errstr;
这是它在 mySQL 中显示的内容
mysql> select max(trade_dt) from test;
+---------------+
| max(trade_dt) |
+---------------+
| 0000-00-00 |
+---------------+
1 row in set (0.04 sec)
我的理解是我需要添加SET trade_dt=str_to_date() 才能将日期作为yyyy-mm-dd 添加到我的数据库中。在我上传到数据库的 .csv 文件中,日期格式为dd/mm/yyyy
另外,如果有帮助,这就是在 mySQL 表中声明 trade_dt 的方式,测试:
trade_dt date NOT NULL
【问题讨论】: