SQLite文本转换为整数或REAL在c++做太多
SQLite TEXT CAST to INTEGER or REAL in C++ Does too much
我在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.02,
3.14 String2相等,3"String3"
6.777760, ' 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文档
当你声明一个列为INTEGER
或REAL
时,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'
- 在没有太多条件句的情况下,我如何避免被零除
- 错误:字符数组的初始值设定项太多
- 对象实例化调用构造函数的次数太多
- Levenshtein 两个文件的距离花费了太多时间
- 我有三个 getline,但是一旦编译,输入就太多了
- 将使用太多的纹理插值器 - 带旋转的着色器
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- C++:数组<>初始值设定项太多
- GLib-ERROR:为GWakeup创建管道:打开的文件太多
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- ZeroMq:打开的文件太多.在同一对象上连续增长的fd使用数
- 读取串行命令花费太多时间
- 为什么 Boost unordered_map 在第一次插入时需要太多时间?
- BRK(0) 花费的时间是否太多?
- Valgrind 声称内存释放中的自由空间太多
- 如果分支太多C++
- 压缩太多文件
- 如何在不设置 ulimit -n 的情况下解决套接字程序打开太多文件的错误