SQL和NOW()成bash脚本

时间:2014-08-07 08:31:45

标签: sql bash datetime insert

我有一个文件“sharp.csv”,其中的数据是这样的:

<name>;<src_ip_address>;<mac_address>;<ip_address>;Vlan1;NOW()

编辑:这些数据由perl脚本填充 我想借助BASH脚本将这些数据插入到SQL数据库中

+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| code_site     | varchar(64) | NO   | PRI | NULL    |       |
| ip_source     | varchar(64) | NO   | PRI | NULL    |       |
| mac_relevee   | varchar(64) | NO   | PRI | NULL    |       |
| ip_relevee    | varchar(64) | YES  |     | NULL    |       |
| vlan_concerne | varchar(64) | YES  |     | NULL    |       |
| date_polling  | datetime    | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+

所以我的命令只是:

arp_router_file="$DIR/working-dir/sharp.csv"
db_arp_router_table="routeur_arp"
$mysql -h $db_address -u $db_user -p$db_passwd $db_name -e "load data local infile '$arp_router_file' REPLACE INTO TABLE $db_arp_router_table fields terminated by ';';"

但我的 NOW()命令不起作用。 数据被插入,但“date_polling”行填充了“0000-00-00 00:00:00”

2 个答案:

答案 0 :(得分:1)

NOW()是一个函数,但load data命令会将输入文件中的所有字段视为文字数据,从而尝试在"NOW()"字段中插入datetime。字符串"NOW()"无法转换为有效的日期时间值,因此您最终会使用默认的&#34; 0000-00-00 00:00:00&#34;值。

您必须从输入文件构建实际的SQL INSERT查询,您可以使用awk执行此操作:

cat input_file.csv | awk -F';' '{print "INSERT INTO routeur_arp (code_site, ip_source, mac_relevee, ip_relevee, vlan_concerne, date_polling) VALUES (\"" $1 "\", \"" $2 "\", \"" $3 "\", \"" $4 "\", \"" $5 "\", " $6 ");"}' > sql_statements.sql

答案 1 :(得分:0)

为了避免向MySQL发送NOW()指令,我将发送一个带有perl的日期时间

use Time::Piece ;
my $t = localtime ;
my $date = $t->ymd;
my $time = $t->hms;

而不是

<name>;<src_ip_address>;<mac_address>;<ip_address>;Vlan1;NOW()

它将

<name>;<src_ip_address>;<mac_address>;<ip_address>;Vlan1;$date $time\n

Perl将其作为String发送,MySQL理解为正确的Datetime