gpt4 book ai didi

sqlite - SQLite:CSV中的数字值被视为文本吗?

转载 作者:行者123 更新时间:2023-12-03 15:01:46 31 4
gpt4 key购买 nike

我只是使用.import命令将一个巨大的文本文件导入到表中。一切正常,除了似乎将数字值清楚地视为文本的事实。例如,始终满足诸如WHERE field > 4之类的条件。创建表时没有指定数据类型,但是创建小表时似乎并不重要。

任何的建议都受欢迎。谢谢!

编辑/结论:事实证明,我的CSV文件中的某些值为空白。最后,我不再那么懒惰并显式声明了数据类型,从而解决了这个问题。

最佳答案

本页描述了SQLite处理类型的方式:http://www.sqlite.org/datatype3.html

特别是:


在以下情况下,
数据库引擎可以转换值
在数字存储类之间
(INTEGER和REAL)和TEXT期间
查询执行。


3.4节(比较示例)应为您提供具体示例,这些示例可能会解释您遇到的问题。这可能是这个例子:


-- Because column "a" has text affinity, numeric values on the
-- right-hand side of the comparisons are converted to text before
-- the comparison occurs.
SELECT a < 40, a < 60, a < 600 FROM t1;
0|1|1



为了避免猜测相似性,您可以显式使用 CAST(也请参阅第3.2节):


SQLite可能尝试转换值
在存储类INTEGER之间,
REAL和/或TEXT,然后执行
比较。是否有
尝试在
比较发生取决于
操作数的亲和力。操作数
亲和力由
以下规则:


简单引用列值的表达式具有
与列具有相同的亲和力。注意
如果X和Y.Z是列名,则+ X
和+ Y.Z被视为表达式
为了确定
亲和力。
形式为“ CAST(expr AS类型)”的表达式具有相似性
与带有a的列相同
声明的类型为“类型”。
否则,表达式不具有NONE亲和力。



这是另一个示例:

CREATE TABLE test (value TEXT);
INSERT INTO test VALUES(2);
INSERT INTO test VALUES(123);
INSERT INTO test VALUES(500);

SELECT value, value < 4 FROM test;
2|1
123|1
500|0


CSV导入可能会创建关联性 TEXT的列。

关于sqlite - SQLite:CSV中的数字值被视为文本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6540770/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com