sla*_*ine 14 csv sqlite import
我正在尝试将我的数据文件(其中有十几个)放入SQLite中的表中.每个文件都有一个标题,我将在接下来的几年里收到它们几次,所以我想:
我定义我的表并导入数据......
> .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
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是删除违规行,但这没有按预期工作,而是删除了整个表...
> DELETE FROM clinical WHERE patid = "patid";
> SELECT * FROM clinical LIMIT 3;
>
Run Code Online (Sandbox Code Playgroud)
我是否弄错了测试等式的语法?我不确定; 文档似乎并没有区分这两者.我以为我会再试一次......
> .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;
>
Run Code Online (Sandbox Code Playgroud)
我甚至在这里正确的轨道上还是我做了一些愚蠢的事情?
我希望有一个简单的选项可以在调用时跳过标题行,.import因为在文本文件中有标题行是一种相当常见的情况.
小智 17
这对我有用:
.read schema.sql
.mode csv
.import --skip 1 artist_t.csv artist_t
Run Code Online (Sandbox Code Playgroud)
或者,如果您只有一个文件要导入,您可以这样做:
.import --csv --skip 1 artist_t.csv artist_t
Run Code Online (Sandbox Code Playgroud)
https://sqlite.org/cli.html#importing_csv_files
patid是列名.
"patid"是引用的列名称.
'patid'是一个字符串.
条件WHERE patid = "patid"将patid列中的值与其自身进行比较.
(SQLite允许带双引号的字符串与MySQL兼容,但仅限于字符串不能与表/列名混淆的情况.)