使用 LOAD DATA INFILE 忽略时间戳中的特定逗号?
Ignore specific comma in timestamp using LOAD DATA INFILE?
我有大量的 CSV 文件都是这样格式化的:
2015/06/29,13:00,1,194,36,390
正如您可能看到的那样,我需要忽略上面示例中分隔“2015/06/29”和“13:00”的逗号。
目前这是我的 sql 命令的样子:
LOAD DATA local INFILE '"!new!"' IGNORE into table db.table COLUMNS TERMINATED BY ',' IGNORE 3 LINES (@when,col2,col3,col4,col5) SET when=STR_TO_DATE(@when,'%Y/%m/%d %H:%i')" -u user -ppass
除那个讨厌的逗号外,所有内容都会导入,将所有内容都排在一列之外。
显然我可以将两者导入单独的列,但它们都需要进入一个 DATETIME 格式的列。任何人都知道我将如何跳过那个箍?
您不需要 "ignore" 逗号。只需将这两个字段导入两个单独的用户定义变量,然后将它们连接成列的单个值。
将日期部分放入用户定义的变量中,就像您已经在做的那样:@whendt
Put 将时间部分的第二个字段放入 second 用户定义变量中:@whentm
在 SET
子句中,将这两个变量与 CONCAT
函数连接在一起。
CONCAT(@whendt, ' ', @whentm)
例如:
LOAD DATA local INFILE '"!new!"'
IGNORE
INTO table db.table
COLUMNS TERMINATED BY ','
IGNORE 3 LINES
( @whendt -- first column is date portion
, @whentm -- second column is time portion
, col2
, col3
, col4
, col5
)
SET when = STR_TO_DATE( CONCAT(@whendt,' ',@whentm) ,'%Y/%m/%d %H:%i')
我有大量的 CSV 文件都是这样格式化的:
2015/06/29,13:00,1,194,36,390
正如您可能看到的那样,我需要忽略上面示例中分隔“2015/06/29”和“13:00”的逗号。
目前这是我的 sql 命令的样子:
LOAD DATA local INFILE '"!new!"' IGNORE into table db.table COLUMNS TERMINATED BY ',' IGNORE 3 LINES (@when,col2,col3,col4,col5) SET when=STR_TO_DATE(@when,'%Y/%m/%d %H:%i')" -u user -ppass
除那个讨厌的逗号外,所有内容都会导入,将所有内容都排在一列之外。
显然我可以将两者导入单独的列,但它们都需要进入一个 DATETIME 格式的列。任何人都知道我将如何跳过那个箍?
您不需要 "ignore" 逗号。只需将这两个字段导入两个单独的用户定义变量,然后将它们连接成列的单个值。
将日期部分放入用户定义的变量中,就像您已经在做的那样:@whendt
Put 将时间部分的第二个字段放入 second 用户定义变量中:@whentm
在 SET
子句中,将这两个变量与 CONCAT
函数连接在一起。
CONCAT(@whendt, ' ', @whentm)
例如:
LOAD DATA local INFILE '"!new!"'
IGNORE
INTO table db.table
COLUMNS TERMINATED BY ','
IGNORE 3 LINES
( @whendt -- first column is date portion
, @whentm -- second column is time portion
, col2
, col3
, col4
, col5
)
SET when = STR_TO_DATE( CONCAT(@whendt,' ',@whentm) ,'%Y/%m/%d %H:%i')