Способ обработки типов SQLite описан на этой странице: http://www.sqlite.org/datatype3.html
В частности:
При обстоятельствах, описанных ниже,
ядро базы данных может преобразовывать значения
между числовыми классами хранения
(INTEGER и REAL) и ТЕКСТ во время
выполнение запроса.
Раздел 3.4 (Сравнительный пример) должен дать вам конкретные примеры, которые, вероятно, объяснят вашу проблему. Это, вероятно, этот пример:
-- Because column "a" has text affinity, numeric values on the
-- right-hand side of the comparisons are converted to text before
-- the comparison occurs.
SELECT a < 40, a < 60, a < 600 FROM t1;
0|1|1
Чтобы избежать предположения о близости, вы можете использовать CAST
явно (см. Также раздел 3.2):
SQLite может пытаться преобразовать значения
между классами хранения INTEGER,
REAL и / или TEXT перед выполнением
сравнение. Будь или нет
преобразования предпринимаются до
сравнение происходит в зависимости от
близость операндов. Операнд
сродство определяется
следующие правила:
- Выражение, которое является простой ссылкой на значение столбца, имеет
та же близость, что и у колонки. Обратите внимание, что
если X и Y.Z - имена столбцов, то + X
и + Y.Z считаются выражениями
с целью определения
Сродство.
- Выражение формы "CAST (expr AS type)" имеет сходство
это то же самое, что столбец с
объявленный тип "type".
- В противном случае выражение имеет NONE affinity.
Вот еще один пример:
CREATE TABLE test (value TEXT);
INSERT INTO test VALUES(2);
INSERT INTO test VALUES(123);
INSERT INTO test VALUES(500);
SELECT value, value < 4 FROM test;
2|1
123|1
500|0
Вероятно, при импорте в CSV создаются столбцы сходства TEXT
.