在使用load data infile时,我们如何使用逗号处理字段?我有这个问题:
$sql = "LOAD DATA LOCAL INFILE '{$file}' INTO TABLE sales_per_pgs
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@user_id, @account_code, @pg_code, @sales_value)
SET
user_id = @user_id,
account_code = @account_code,
product_group_code = @pg_code,
sales_value = REPLACE(@sales_value, ',', ''),
company_id = {$company_id},
year = {$year},
month = {$month}";
并且来自csv的一行看起来像这样:
139, pg89898, op89890, 1,000,000.00
其中1,000,000.00
是销售价值....
目前,我的数据库中插入的内容仅为"1
任何想法?谢谢先进...
修改
用户下载包含以下列的表单:
user id
,account id
,pg id
,sales value
前三列user id
,account id
,pg id
已填充且sales value
列为空,因为用户必须手动填写...用户使用MS excel来做到这一点......
表单完成后,他现在将上传它,我正在使用load data infile
命令...
答案 0 :(得分:7)
您的内容应该如下:
"139", "pg89898", "op89890", "1,000,000.00"
然后您可以将以下内容添加到命令中:
ENCLOSED BY '"' ESCAPED BY "\\"
你不会有问题。
另外,如果你没有任何包含,
的段落或字符串,你可以尝试一些:
FIELDS TERMINATED BY ', '
答案 1 :(得分:1)
您必须更改正在输入的CSV文件或更改生成CSV文件的输出 - 声音相同但不是。
您可以使用引号修改封装字段所带来的数据并更新您的命令,以便使用ENCLOSED BY '"'
或
更改输出,使其将数字格式设置为1000000而不是1,000,000
答案 2 :(得分:0)
在CSV中,comas将“列”分开。由于您的上一个值为1,000,000.00,因此它被视为3个不同的列,而不是一个(按预期)。
您可以引用每个值(列)或更改数字格式,方法是删除逗号(,)。
答案 3 :(得分:0)
如果您的整个文件完全,那么也许您可以使用fields terminated by ', '
(逗号+空格),当且仅当您在任何个人中没有该字符串时值。如果您使用的是Linux(或任何其他类Unix系统)并且字段分隔符是逗号+空格,则可以使用sed
将此分隔符替换为其他内容:
sed 's/, /|/g' myfile.csv > myfile.txt
但是,我会推荐已经说过的内容:修改输入文件,用引号或双引号括起每个值并使用fields terminated by ',' optionally enclosed by '"'
。
请记住,您的字段终止字符必须是唯一的,并且不得包含在任何单个值中。
答案 4 :(得分:0)
作为一种解决方法,试试这个 -
LOAD DATA INFILE
...
FIELDS TERMINATED BY ', '
...
答案 5 :(得分:0)
遇到了同样的问题,只使用了ENCLOSED BY '"'
来解决了我的问题,因为我混合了数字和字符串,这恰恰是手册中ENCLOSED BY的意思:
如果指定OPTIONALLY,则ENCLOSED BY字符仅用于 封闭具有字符串数据类型(例如 CHAR,BINARY,TEXT或ENUM):