【问题标题】:sqlite: import csv into tablesqlite:将csv导入表
【发布时间】:2012-09-14 23:52:41
【问题描述】:

我有一个具有以下列结构的表:

sqlite> create table stocks(stockticker varchar(4), tradedate date, open double, high double, low double, close double, volume integer, adjclose double);

我想要做的是将一组股票的每日股票数据保存到这个表中,但用当前存在的任何历史数据填充它。所以我将 XLI 的历史数据从 yahoo/finance 保存到一个名为 XLI.csv 的文件中

在 mySQL 中,我曾经能够执行以下操作:

sqlite> LOAD DATA INLINE 'XLI.csv'
   ...> INTO TABLE stocks
   ...> FIELDS TERMINATED BY ','
   ...> LINES TERMINATED BY '\n'
   ...> IGNORE 1 LINES
   ...> (@tradedate, open, high, low, close, volume, adjclose)
   ...> SET stockticker = 'XLI',
   ...> tradedate = STR_TO_DATE(@tradedate, '%m/%d/%Y');
Error: near "LOAD": syntax error
sqlite>

现在我了解 SQLITE 有很多不同之处,但我是新手,我发现的所有示例通常都具有以下命令结构:

sqlite> .import <filename> <table>

这对我没有帮助,因为我还需要设置“stockticker”字段,忽略第一行(标题)并确保正确导入日期。我没有在文档或互联网上找到任何示例来显示我想要做的事情。

非常感谢您的帮助。

【问题讨论】:

    标签: sqlite csv import


    【解决方案1】:

    将原始数据导入临时表,然后将内容选择到刻度表中(添加 where 条件以忽略第一行中的值)

    要转换日期字符串,您可以通过重新排列原始日期字符串并将其插入目标日期列来创建有效的sqlite date string(例如:yyyy-mm-dd)。

    insert into tick (stockticker, tradedate, open, high, low, close, volume, adjclose)
      select stockticker, (substr(date, 7) || '-' || substr(date, 1, 2) || '-' || substr(date, 4, 2)),
      open, high, low, close, volume, adjclose from stage
    

    【讨论】:

    • 感谢 jspcal。我创建了一个没有 stockticker 列的临时表,因为 .csv 文件中没有该列。如果我现在想执行您提供的代码,例如,我该如何设置 stockticker 字段为“XLI”?感谢您的帮助。
    • 我的意思是如何为分时表中的每一行设置/插入 stockticker 字段?我已将 staging 表中的所有内容复制到 tick 表中,但我现在唯一需要做的就是设置股票代码字段。
    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 2011-04-16
    • 2013-02-03
    • 2012-03-08
    • 2015-09-23
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多