我正在尝试将我的数据文件(其中有十几个)放入sqlite中的表中。每个文件都有一个标题,在接下来的一年里我会收到几次,所以我想:
当我接收到每个文件时,避免编辑每个文件以删除头文件;
避免使用shell脚本或python执行此操作。
我定义我的表并导入数据…

> .separator "\t"
> .headers on
> CREATE TABLE clinical(
       patid      VARCHAR(20),
       eventdate  CHAR(10),
       sysdate    CHAR(10),
       constype   INT,
       consid     INT,
       medcode    INT,
       staffid    VARCHAR(20),
       textid     INT,
       episode    INT,
       enttype    INT,
       adid           INT);
> .import "Sample_Clinical001.txt" clinical
> SELECT * FROM clinical LIMIT 10;
patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
471001  30/01/1997  09/03/1997  4   68093   180 0   0   0   20  11484
471001  30/01/1997  09/03/1997  2   68093   60  0   0   0   4   11485

我的第一个想法是删除有问题的行,但这并没有按预期工作,而是删除了整个表…
> DELETE FROM clinical WHERE patid = "patid";
> SELECT * FROM clinical LIMIT 3;
>

我是否得到了测试相等性的语法错误?我不确定;the docs似乎不能区分这两者。我想我会再试一次…
> .import "Sample_Clinical001.txt" clinical
> SELECT * FROM clinical LIMIT 3;
patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
471001  30/01/1997  09/03/1997  4   68093   180 0   0   0   20  11484
471001  30/01/1997  09/03/1997  2   68093   60  0   0   0   4   11485
> DELETE FROM clinical WHERE patid == "patid";
> SELECT * FROM clinical LIMIT 3;
>

我是在正确的轨道上还是在做傻事?
在调用.import时,我希望有一个简单的选项可以跳过标题行,因为在文本文件中有标题行是非常常见的情况。

最佳答案

patid是列名。
"patid"是带引号的列名。
'patid'是一个字符串。
条件WHERE patid = "patid"patid列中的值与自身进行比较。
(sqlite允许带双引号的字符串与mysql兼容,但仅限于不能将字符串与表/列名称混淆的情况。)

关于sqlite - SQLite3导入CSV和排除/跳过标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13587314/

10-10 00:55