我的文本类型列名为“ amountDesc”,其中包含一些值。我想获取所有大于100的值。我写了一个查询,但没有给出正确的结果。
我尝试了以下代码:
String query = "SELECT amountDesc FROM increment WHERE amountDesc > 100";
Cursor rawQuery = getReadableDatabase().rawQuery(query, null);
if (rawQuery.moveToFirst()) {
while (!rawQuery.isAfterLast()) {
String value = rawQuery.getString(rawQuery.getColumnIndex("amountDesc"));
rawQuery.moveToNext();
Log.d("tvlateamoutn1", value);
}
}
并在Logcat上获取这些值:
500 50 200 50
如您所见,它不是正确的值,因为我需要> 100个值。我知道对于大多数初学者来说,它的问题,但我坚持了下来。请解决。
答案 0 :(得分:1)
我的文本类型列名为“ amountDesc”,其中包含一些值。
那么在您的表定义中,您有amountDesc TEXT
或等价的东西?
具有TEXT关联性的列使用存储类NULL,TEXT或BLOB存储所有数据。如果将数字数据插入到具有TEXT关联性的列中,则会在存储之前将其转换为文本形式。
and:
如果一个操作数具有TEXT亲缘关系,而另一个操作数没有TEXT亲缘关系,则TEXT亲和力将应用于另一操作数。
由于该列具有文本相似性,所以另一个操作数将从整数100
转换为字符串'100'
。字符串'50'
大于字符串'100'
,因为'5'
大于'1'
。因此,您的查询返回的正是您要返回的内容。您只是在问一个与您想自己不同的东西。
如果要将该列中的值视为整数并进行相应比较,请在创建表时使用INTEGER
而不是TEXT
。不能为列中存储的数据选择正确的相关性的一个较差的解决方法是,在计算中使用这些值时将其转换为适当的类型... CAST(amountDesc AS INTEGER) > 100
或类似的东西。
(对于有效使用sqlite,阅读和理解有关数据类型和相似性的链接文档必不可少。)
答案 1 :(得分:0)
您可以检查架构中 amountDesc 的数据类型。如果声明的数据类型为字符串,则不能与整数(100)进行比较。