微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLite3导入CSV和排除/跳过标题

我试图让我的数据文件(其中有十几个)到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兼容,但只有在字符串不能与表/列名称混淆的地方).

原文地址:https://www.jb51.cc/sqlite/197583.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐