android sqlite 日期范围

标签 android sqlite date

我的 Android 项目中有一个 sqlite 数据库,我尝试选择日期之间的所有行。 但是此查询没有返回任何行:

String where = OperationEntry.COLUMN_NAME_ENTRY_ACCOUNT_FK + " = ? AND " +
           OperationEntry.COLUMN_NAME_ENTRY_DATE + " > date('2013-01-01') AND "+
           OperationEntry.COLUMN_NAME_ENTRY_DATE + " < date('2013-12-31') ;";
String[] whereValue = {accountName};

Cursor c = db.query(
    OperationEntry.TABLE_NAME,  // The table to query
    projection,                 // The columns to return
    where,          // The columns for the WHERE clause 
    whereValue,                 // The values for the WHERE clause
    null,                       // don't group the rows
    null,                       // don't filter by row groups
    sortOrder                   // The sort order
);

此外,如果我使用 2013-01-01 和 2014-12-31,所有行都是匹配的。
我已经测试了有和没有日期的功能,我有同样的问题。
请注意,OperationEntry.COLUMN_NAME_ENTRY_DATE 是日期类型。

你能帮帮我吗?你发现我的代码有什么错误吗?
谢谢
乔纳森。

编辑: 我在这里放了一些额外的代码。 建表查询:

public static final String SQL_CREATE_ENTRIES =
"CREATE TABLE IF NOT EXISTS " + OperationEntry.TABLE_NAME + " (" +
    OperationEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
         ... +
    OperationEntry.COLUMN_NAME_ENTRY_DATE + " DATE, " + ...
" )";

查询插入:

GregorianCalendar calendar = ...;
String date = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
ContentValues values = new ContentValues();
values.put(OperationEntry.COLUMN_NAME_ENTRY_TITLE, operation.getTitle());
values.put(OperationEntry.COLUMN_NAME_ENTRY_QTE, operation.getQte());
values.put(OperationEntry.COLUMN_NAME_ENTRY_DATE, date);
    ...

long newRowId;
newRowId = db.insert(
    OperationEntry.TABLE_NAME,
    null,
    values);

最佳答案

我不是 Android 专家,但你显然误用了 date SQLite function . date('2013-01-01') 没有意义,它的计算结果为 '2013-01-01'

改为尝试:

String where = OperationEntry.COLUMN_NAME_ENTRY_ACCOUNT_FK + " = ? AND " +
           "date(" + OperationEntry.COLUMN_NAME_ENTRY_DATE + ") > '2013-01-01' AND " +
           "date(" + OperationEntry.COLUMN_NAME_ENTRY_DATE + ") < '2013-12-31';";

您需要确保返回的列数据格式正确,而不是您硬编码的字符串!

关于android sqlite 日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746697/

相关文章:

android - 如何在主从应用程序中使用 Canvas 绘制文本?

sqlite - Gradle错误:找不到类异常

database - 使用 Android 应用程序资源中的 sqlite 数据库

r - 在 R 中每个月生成相同周的序列

PHP:如何以小时:分钟:秒的形式获取当前时间?

android - 将图像传递给另一个 Activity 时,图像会丢失其原始结果

android - 无法将 ADT 插件安装到 Eclipse - 'violates contract' 错误消息

java - 自定义键盘候选 View 导致 Gmail EditText 跳转

c# - 使用 Linq to Sqlite (linq2db) 创建表

c# - Noda Time : Period. 返回错误值之间