我正在尝试在CAST AS INTEGER
子句中使用WHERE
。由于我的列为TEXT
,因此我希望在该列上应用<=
和>=
。它在SqlBrowser
上运行良好(精确记录为i,e 12条记录)但在模拟器或设备上没有返回准确的结果(转换为整数似乎不能超过1000条记录)(SqlLite
数据库)。这是我的查询
SELECT l.* FROM leads AS l
WHERE cast ( l.lead_budget as INTEGER) >= 1200
AND cast ( l.lead_budget as INTEGER ) <= 15000
我想知道我错过了什么。任何猜测
答案 0 :(得分:3)
这是kitkat
的问题。我过去遇到过这样的问题。我在6.0上尝试了相同的强制转换查询,它按预期工作。试试6.0。
但sqllite
支持转换,而here是关于强制转换为整数等的文档。
但经过一番挖掘后,我发现大多数kitkat使用SQLite 3.7.11:
。Here是一个链接。
我找到了关于sqllite版本的page。他们描述了他们在每个版本中修复的问题。
当将大于+9223372036854775807
的浮点值转换为整数时,更改了CAST表达式的已定义行为,以便结果是最大可能的整数+9223372036854775807
,而不是最小的整数, -9223372036854775808
。在此更改之后,CAST(作为INT的9223372036854775809.0)产生+9223372036854775807
而不是-9223372036854775808
。 ←可能不相容的变化!
然后在3.8.7
中他们改进了CAST运算符的优化。然后我发现这个ticket解释了很多错误。现在它已修复可能工作或新设备,但对于旧设备,你必须找到一些其他解决方案。有了这个os问题,你不能依赖于强制转换查询。因为您不确定哪个OS版本使用哪个SQL版本。希望它有所帮助。