mysql - 使用包含不支持格式的文字值的 CSV 数据更新 MySQL 表

标签 mysql csv yahoo-finance

最近有人删除了一个我认为对社区很有帮助的问题。我解释一下:

I am obtaining a CSV file from the Yahoo! Finance API, with which I then wish to update the following MySQL table:

CREATE TABLE yahoo.static (
  symbol         VARCHAR(10) NOT NULL,
  exchange       VARCHAR(200),
  name           VARCHAR(300),
  capitalization DOUBLE,
  div_pay_date   DATE,
  book_value     DOUBLE,
  float_shares   BIGINT UNSIGNED,
  PRIMARY KEY (symbol)
);

The CSV file has the following format:

"AAUKF","AAUKF","Other OTC","AAUKF","ANGLO AMERICAN OR","AAUKF",29.271B,"AAUKF","26-Apr-12","AAUKF",26.69,"AAUKF",  1134107000

Particular problems include:

  • repeated, superfluous values;

  • suffixes (e.g. K, M and B) that indicate order of magnitude; and

  • dates not formatted in a supported literal format.

How can I update the table from such a CSV file?

最佳答案

LOAD DATA内命令,可以将列分配给用户变量,然后相应地执行适当的操作:

LOAD DATA INFILE '/tmp/ystaticB.csv'
    REPLACE
    INTO TABLE yahoo.static
    CHARACTER SET utf8              -- or however the file is encoded
    FIELDS
        TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'  -- quotes appear to be optional
    LINES
        TERMINATED BY '\r\n'        -- or however newlines are encoded
    (symbol,@z,exchange,@z,name,@z,@c,@z,@d,@z,book_value,@z,float_shares)
    SET
        capitalization = @c * POW(10, CASE RIGHT(@c,1)
                           WHEN 'K' THEN 3
                           WHEN 'M' THEN 6
                           WHEN 'B' THEN 9
                         END),
        div_pay_date   = STR_TO_DATE(@d, '%e-%b-%y')

关于mysql - 使用包含不支持格式的文字值的 CSV 数据更新 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067103/

相关文章:

r - write.csv() 极其意外的行为

android - 执行过程后,Spinner 对象不会接受第二个输入

sql - 如何在 MySQL 中生成一系列每小时平均值?

mysql - 如何获取 AI 的 mysql 查询?

python - 如何读取包含方括号中的列表的 CSV 方言?

python - 编写包含多个变量的 CSV

r - 分块循环遍历列表

Java从网络读取CSV文件

java - 如何在jsp中获取动态创建的文本框的值

MySQL创建过程声明变量问题