无法在SQLite中使用之间的Date列执行查询

时间:2018-03-15 12:28:51

标签: android performance sqlite date android-sqlite

我在Android中使用SQLITE数据库。

创建表查询是:

String CREATE_TBookOrder = "CREATE TABLE IF NOT EXISTS BookOrder (" +
        "  `OrderId` INTEGER ," +
        "  `OrderDate` DATE ," +
        "  `OrderTotal` DOUBLE " +
        ")";

我正在尝试使用以下查询在日期之间获取数据:

 SELECT OrderId , OrderTotal FROM BookOrder
 WHERE OrderId = 55 AND ( OrderDate BETWEEN '2018-01-01' AND '2018-12-12')

但我收到零记录作为回应。

我的获取数据的代码是:

String queryStr = "SELECT OrderId , OrderTotal FROM BookOrder WHERE OrderId = 55 AND ( OrderDate BETWEEN '2018-01-01' AND '2018-12-12')";
sqLiteDatabase = this.getWritableDatabase();
cursor = sqLiteDatabase.rawQuery(queryStr, null);
if (cursor.moveToFirst()) {
    do {
        Log.d("data", "sub OrderId " + cursor.getInt(0));
        Log.d("data", "sub OrderTotal " + cursor.getFloat(1));
        Log.d("data", "--------------");
    } while (cursor.moveToNext());
}

sqLiteDatabase.close();

这在SQL Server上运行顺利但在SQLITE Android中没有成功运行。

3 个答案:

答案 0 :(得分:0)

假设日期以yyyy-mm-dd格式存储为字符串,那么您需要通知查询您正在处理查询中的日期。

所以而不是: -

SELECT OrderId , OrderTotal FROM BookOrder
    WHERE OrderId = 55 
        AND ( OrderDate BETWEEN '2018-01-01' AND '2018-12-12')

您可以使用: -

SELECT OrderId , OrderTotal FROM BookOrder
    WHERE OrderId = 55 
        AND (date(OrderDate) BETWEEN date('2018-01-01') AND date('2018-12-12'))

您可以查看SQL As Understood By SQLite - Date And Time Functions

答案 1 :(得分:-1)

我读了你的问题,我认为有日期DataType的问题。请检查此link,也许它可以解决您的问题。

答案 2 :(得分:-1)

解决它后尝试了很多选项。 对我有用的是, 首先,我将日期列的数据类型更改为DATETIME。 然后在将日期插入列之前,我将其转换为yyyy-MM-dd hh:mm:ss格式。

在检索日期时,我使用了以下查询,

SELECT OrderId,OrderTotal FROM BookOrder  在哪里OrderId = 55 AND(OrderDate BETWEEN' 2018-01-01' AND' 2018-12-12')

其中第一个日期为包含日期,第二个日期为独家日期。