SQLite文本转换为整数或REAL在c++做太多

SQLite TEXT CAST to INTEGER or REAL in C++ Does too much

本文关键字:c++ 太多 REAL 文本 转换 整数 SQLite      更新时间:2023-10-16

我在TEXT列中转换数据类型时有问题。

I HAVE上传自定义CSV文件中的所有数据。我甚至不能保证得到我所期望的所有列,更不用说正确的数据类型了,所以我从一个所有列都是TEXT类型的表开始,并在空白处放置空字符串。

交货。表看起来像这样

CREATE TABLE tbl1 (col1 TEXT, col2 TEXT, col3 TEXT);

从文件加载tbl1后,我运行这个。

SELECT * FROM tbl1;

选择结果:

' 1 ', ' String1 ', ' 2.0 '

"2","String2相等"、"3.14"

"3","String3"、"6.77776"

‘h’,‘Stringh’,‘h.h

","弦","

现在我想从tbl1中获取数据并使用它来填充这个表。

CREATE TABLE (col1 INTEGER, col2 TEXT, col3 REAL);

我是这样尝试的。

INSERT INTO tbl2 SELECT CAST(tbl1;col1作为INTEGER), tbl1。col2, (tbl1。

FROM tbl1;

之后我运行这个,

SELECT * FROM tbl2;

选择结果:

1,"String1",

2.0

2,

3.14 String2相等,

3"String3"

6.77776

0, ' Stringh ', 0

0, '字符串',0

我真正想要的是抓住我认为是"好"的类型并将它们插入tbl2,然后将我认为是"坏"类型的所有值放入'tbl3'中,看起来像这样。

CREATE TABLE tbl3 (col1 TEXT, col2 TEXT, col3 TEXT, REASON_FOR_REJECTION TEXT);

tbl3将用于报告和可能的故障排除坏数据。

我是否需要在c++中预处理此数据,然后将其插入tbl2或SQLite是否支持某种查询函数,允许我捕获"坏"类型转换?

更新:

通过添加CL。我可以区分哪些记录有"坏"类型转换并清理tbl2并将坏数据行添加到tbl3

阅读有关类型关联的SQLite文档

当你声明一个列为INTEGERREAL时,SQLite将自动尝试转换值。任何不能转换的值都将保留原来的类型。

因此,只需将数据直接导入tbl2,然后使用如下查询查找所有有错误的记录:

INSERT INTO tbl3
SELECT col1, col2, col3,
       trim(CASE typeof(col1)
              WHEN 'integer' THEN ''
              ELSE                'col1:' || typeof(col1)
            END ||
            ' ' ||
            CASE typeof(col3)
              WHEN 'real' THEN ''
              ELSE             'col3:' || typeof(col3)
            END)
FROM tbl2
WHERE typeof(col1) != 'integer'
   OR typeof(col3) != 'real'