大于运算符(>)不能从数据库中给出正确的结果

时间:2019-06-20 10:34:04

标签: android sqlite

我的文本类型列名为“ amountDesc”,其中包含一些值。我想获取所有大于100的值。我写了一个查询,但没有给出正确的结果。

数据库如下所示。 enter image description here

我尝试了以下代码:

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个值。我知道对于大多数初学者来说,它的问题,但我坚持了下来。请解决。

2 个答案:

答案 0 :(得分:1)

  

我的文本类型列名为“ amountDesc”,其中包含一些值。

那么在您的表定义中,您有amountDesc TEXT或等价的东西?

来自the documentation

  

具有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)进行比较。