Больше, чем оператор (>) не дает правильный результат из базы данных - PullRequest
1 голос
/ 20 июня 2019

У меня столбец с текстовым типом с именем "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 ]

1 голос
/ 20 июня 2019

У меня есть столбец с текстовым типом с именем "amountDesc", в котором есть некоторые значения.

Итак, в определении вашей таблицы есть amountDesc TEXT или что-то эквивалентное?

С документация :

СтолбецПри сходстве TEXT все данные хранятся с использованием классов хранения NULL, TEXT или BLOB.Если числовые данные вставляются в столбец со сходством TEXT, перед сохранением они преобразуются в текстовую форму.

и :

Если один операндимеет сходство TEXT, а другой не имеет сходства, тогда сходство TEXT применяется к другому операнду.

Поскольку столбец имеет сходство текста, другой операнд преобразуется из целого числа 100 встрока '100'.Строка '50' больше строки '100', потому что '5' больше '1'.Таким образом, ваш запрос возвращает именно то, что вы просите его вернуть.Вы просто спрашиваете что-то отличное от того, что вы думаете о себе.

Если вы хотите рассматривать значения в этом столбце как целые числа и сравнивать их соответственно, используйте INTEGER not TEXT при создании таблицы.Плохой обходной путь для неправильного выбора соответствия для данных, хранящихся в столбце, заключается в приведении значений к соответствующему типу при использовании их в вычислениях ... CAST(amountDesc AS INTEGER) > 100 или что-то в этом роде.

(Чтение ипонимание связанной документации по типам данных и сходству необходимо для эффективного использования sqlite.)

0 голосов
/ 20 июня 2019

Можете ли вы проверить тип данных amountDesc в схеме. Если объявленный тип данных является строкой, вы не можете сравнить с целым числом (100).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...