使用来自c ++和console的sqlite3的奇怪结果

时间:2014-02-03 16:37:39

标签: c++ sql csv sqlite

为什么可能是这种行为的原因? 我错过了什么?

我不太清楚为什么会这样,我猜这是SQLite3中的一个错误

我从SQL2008的结果中导出了一个CSV文件,该文件看起来像这样(“time”是第一列):

1,1000,1000,1000,1000,0
1069545600,1000,1000,1000,1000,0
1070150400,1000,1000,1000,1000,0
1070755200,1000,1000,1000,1000,0
1071360000,1000,1000,1000,1000,0
1071964800,1000,1000,1000,1000,0
1072569600,1000,1000,1000,1000,0
1072915200,1000,1000,1000,1000,0
1073174400,1000,1000,1000,1000,0
1073779200,1000,1000,1000,1000,0
....

然后我使用“.separator”导入sqlite3表,然后“.import file.csv data”

然后我从C ++程序发出以下SQL语句:

SELECT time, open, high, low, close, volume FROM data ORDER BY time DESC

但是结果显示第一行带有“time == 1”,它应该是显示的最后一行。

sqlite> SELECT time, open, high, low, close, volume FROM data ORDER BY time DESC LIMIT 50;
1|1000.0|1000.0|1000.0|1000.0|0
1353196800|801.3253|810.5765|801.3253|810.5765|0
1352592000|810.1836|816.1449|800.1838|801.3998|0
1351987200|827.2505|835.2409|810.2589|810.2589|0
1351382400|826.5157|829.271|825.9134|827.3272|0
1350777600|833.4383|833.4383|825.2886|826.5936|0
....

这更奇怪:

sqlite> SELECT * FROM data where time > 1353196800;
1|1000.0|1000.0|1000.0|1000.0|0

其他数据库正常工作正常,它们具有相同的结构,但这是唯一一个从源自SQLServer2008的CSV导入的,我认为由于某种原因,第一行被解释为char而不是INT,第一行CSV总是错的,这个被认为是标题还是什么?

表架构:

sqlite> .schema data
CREATE TABLE data ( time INTEGER PRIMARY KEY DESC, open REAL, high REAL, low REAL, close REAL, volume INTEGER );

1 个答案:

答案 0 :(得分:0)

我发现SQL Manager Studio导出的CSV文件带有一个“标题”,对于vim和其他编辑器是不可见的,SQLite将标题作为第一列值的一部分。

alter-mac:data$ hexdump exportedresult.csv 
0000000 ef bb bf 31 32 32 38 31 37 36 30 30 30 2c 31 30
0000010 30 30 2c 31 30 30 30 2c 31 30 30 30 2c 31 30 30
...

ef bb bf