SQLite查询列类型为INTEGER的WHERE子句

时间:2014-04-19 06:50:31

标签: android sqlite

我有一个包含2列类型的SQLite表; VARCHARINTEGER。如果同一行中的VARCHAR值等于INTEGER

,我需要在0列中选择所有相关值

我的代码示例:

public static final String CreateDateTable = "create table " + DATE_TABLE
        + " (" + DATE + " VARCHAR(30) not null, " + INTEGER_COLUMN
        + " INTEGER DEFAULT 0)";

    String[] column = new String[] { DATE};
    String WHERE = "CAST("+INTEGER_COLUMN+" as VARCHAR) = ?";
    String[] WHEREARGS = new String[] { "0" };
    Cursor c;
    c = ourDatabase.query(DATE_TABLE, column, WHERE, WHEREARGS, null, null,
            null);

正在返回所有行,WHERE子句似乎无效。

3 个答案:

答案 0 :(得分:1)

解决方案是将整数列转换为TEXT, 以下代码返回了正确的结果。

String WHERE = "CAST("+INTEGER_COLUMN+" as TEXT) = ?";

答案 1 :(得分:0)

您期望的输出值类型是什么?如果只是varchar列,那么

SELECT charCol
FROM table
WHERE table.intCol = 0;

答案 2 :(得分:0)

你应该尝试:

String[] column = { DATE };
String where = INTEGER_COLUMN + " = ?";
String[] whereArgs = { "0" };

Cursor c = ourDatabase.query(
    DATE_TABLE, column, where, whereArgs, null, null, null);

转换为VARCHAR是多余的。

但是,它确实不应该导致返回所有行。所以,我的猜测是插入值的方式或者你看待结果的方式有问题。

更完整的代码示例可能有助于找出哪个。

修改

我尝试了您发布的更新代码,包括创建表格。它实际上并没有编译,但假设您的意思是+ " INTEGER DEFAULT 0,)";而不是+ " INTEGER DEFAULT 0,")";,它可以工作,并且仍然只返回正确的行。

同样,如果您希望我们能够找到问题,您应该发布用于插入值的代码,查询数据库的方式以及确切的结果。