1

我有一个 Sqlite 数据库,其中一列被定义为“TEXT NOT NULL”。有些值是字符串,有些可以转换为 DOUBLE,有些可以转换为 INTEGER。一旦我将它缩小到 DOUBLE 值,我想做一个获取一系列数据的查询。假设我的列名为“Value”。我可以这样做吗?

SELECT * FROM Tbl WHERE ... AND Value >= 23 AND Value < 42

那是要进行某种 ASCII 比较还是数字比较?整数还是实数?BETWEEN 运算符的工作方式是否相同?

如果我这样做会发生什么?

SELECT MAX(Value) FROM Tbl WHERE ...

它会进行字符串或整数或浮点比较吗?

4

2 回答 2

0

您无法将文本转换为整数或双精度,因此您将无法做您想做的事。

如果该列是 varchar 你可以通过这样做有机会:

select * 
from Tbl 
WHERE     ISNUMERIC(Value ) = 1 --condition to avoid a conversion from string to int for example
and cast(value as integer) > 1 --rest of your conditions
于 2012-05-16T16:35:35.797 回答
0

这一切都在 SQLite 第 3 版中的数据类型一文中进行了解释。例如,第一部分问题的答案是

INTEGER 或 REAL 值小于任何 TEXT 或 BLOB 值。当一个 INTEGER 或 REAL 与另一个 INTEGER 或 REAL 进行比较时,将执行数值比较。

这就是为什么SELECT 9 < '1'两者SELECT 9 < '11'都给出1(真)。

表达式“a BETWEEN b AND c”被视为两个单独的二进制比较“a >= b AND a <= c”

最重要的一点是,列类型只是一个注解;SQLite 是动态类型的,因此每个值都可以具有任何类型。

于 2012-05-16T16:43:09.570 回答