在sqlite android中作为interger强制转换,无法返回准确的结果

时间:2017-01-20 12:26:39

标签: android sql

我正在尝试在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

我想知道我错过了什么。任何猜测

1 个答案:

答案 0 :(得分:3)

这是kitkat的问题。我过去遇到过这样的问题。我在6.0上尝试了相同的强制转换查询,它按预期工作。试试6.0。 但sqllite支持转换,而here是关于强制转换为整数等的文档。 但经过一番挖掘后,我发现大多数kitkat使用SQLite 3.7.11:Here是一个链接。 我找到了关于sqllite版本的page。他们描述了他们在每个版本中修复的问题。

这是他们在3.8.2

中的变化

当将大于+9223372036854775807的浮点值转换为整数时,更改了CAST表达式的已定义行为,以便结果是最大可能的整数+9223372036854775807,而不是最小的整数, -9223372036854775808。在此更改之后,CAST(作为INT的9223372036854775809.0)产生+9223372036854775807而不是-9223372036854775808。 ←可能不相容的变化!

然后在3.8.7中他们改进了CAST运算符的优化。然后我发现这个ticket解释了很多错误。现在它已修复可能工作或新设备,但对于旧设备,你必须找到一些其他解决方案。有了这个os问题,你不能依赖于强制转换查询。因为您不确定哪个OS版本使用哪个SQL版本。希望它有所帮助。