从CSV导入时,如何获得记录为null的缺失值



我有多个,大的CSV文件,每个文件在许多地方都缺少值。当我将CSV文件导入sqlite时,我希望将丢失的值记录为null,原因是另一个应用程序期望丢失数据由null表示。我当前的方法不会产生所需的结果。

示例CSV文件(test.csv)是:

12|gamma|17|delta
67||19|zeta
96|eta||theta
98|iota|29|

第一行完成;其他每条线都有(或旨在显示!)一个缺少的项目。当我导入时:

.headers on
.mode column
.nullvalue NULL
CREATE TABLE t (
  id1     INTEGER  PRIMARY KEY,
  a1      TEXT,
  n1      INTEGER,
  a2      TEXT
);
.import test.csv t
SELECT
  id1, typeof(id1),
  a1,  typeof(a1),
  n1,  typeof(n1),
  a2,  typeof(a2)
FROM t;

结果是

id1   typeof(id1)  a1      typeof(a1)  n1  typeof(n1)  a2      typeof(a2)
----  -----------  ------  ----------  --  ----------  ------  ----------
12    integer      gamma     text      17  integer     delta   text                      
67    integer                text      19  integer     zeta    text                      
96    integer      eta       text          text        theta   text                      
98    integer      iota      text      29  integer             text

因此,缺失值已成为文本。我将感谢一些有关如何确保所有缺失值变为零的指导。

sqlite3将值导入文本,似乎没有一种使其作为nulls将空值视为nulls的方法。

但是,您可以在导入后自己更新表,将空字符串设置为nulls,例如

UPDATE t SET a1=NULL WHERE a1='';

重复每列。

您还可以为此类更新创建触发器:

CREATE TRIGGER trig_a1 AFTER INSERT ON t WHEN new.a1='' BEGIN
  UPDATE t SET a1=NULL WHERE rowid=new.rowid;
END;

对于您无法在导入之后无法更新的情况其他stackoverflow问题

相关内容

  • 没有找到相关文章

最新更新