从SQLITE数据库kotlin中检索日期数据

问题描述 投票:1回答:1

我有一个SQlite数据库,我用日期存储一些数据。

现在我希望获得数据日期明智:

  1. 月份 - 这意味着我将当前日期为EndDate的值传递给本月的第1个日期。
  2. 明智的一年 - 这意味着我希望获得数据1月1日至20日...预览31-march-20 ...当前
  3. 明智的开始和结束日期 - 听到我通过日期。

为此我得到一个解决方案是HERE for java。

但我不知道如何工作。任何人请解释我如何工作以及如何获得数据,如上所述。对于KOTLIN

TABLE

db.createTable(customerDetail, true,
                credit_id to INTEGER + PRIMARY_KEY + AUTOINCREMENT,
                credit_type to TEXT,
                c_id to TEXT,
                credit_amount to TEXT,
                credit_date to TEXT,
                addFrom to TEXT
        )

UPDATE

对于月份数据,我将尝试以下查询:

"SELECT * FROM $customerDetail WHERE $credit_date BETWEEN strftime('%d-%m-%Y', '$startDate') AND strftime('%d-%m-%Y', '$currentDate')"
/*SELECT * FROM CustomerDetail WHERE credit_date BETWEEN strftime('%d-%m-%Y', '01/02/2019') AND strftime('%d-%m-%Y', '23/02/2019')*/

但它给了我arralistSize = 0

之后我可以写新的查询,如:

"SELECT * FROM $customerDetail WHERE $credit_date BETWEEN '$startDate' AND '$currentDate'"
/*SELECT * FROM CustomerDetail WHERE credit_date BETWEEN '01/02/2019' AND '23/02/2019'*/

在此查询中,数据将返回。但它返回所有数据而没有任何过滤。

如果有人知道为什么这样的工作请帮助我。

我的数据清单

enter image description here

提前致谢。

Solution :

明智的解决方案

我只是将日期格式"dd/mm/yyyy"更改为"yyyy/mm/dd"并重新插入所有数据。

和QUERY下的火灾:

"SELECT * FROM $customerDetail WHERE $credit_date BETWEEN '$startDate' AND '$currentDate'"
sqlite kotlin
1个回答
0
投票

SQLite没有像其他RDBMS那样的Date数据类型。它将日期视为TEXT。 因此,当它比较credit_date列时,它确实比较了字符串。 如果您以YYYY-MM-DD格式存储日期并与相同格式进行比较,那么这样就可以了。 但如果您以DD/MM/YYYY格式存储日期,则无法进行比较。 所以最好的解决方案是将列credit_date的格式更改为YYYY-MM-DD。 如果这不可能,那么你必须转换列的字符串值,如下所示:

substr(credit_date, 7, 4) || '-' || substr(credit_date, 4, 2) || '-' || substr(credit_date, 1, 2)

现在您可以在以下查询中使用它:

SELECT * FROM $customerDetail 
WHERE substr($credit_date, 7, 4) || '-' || substr($credit_date, 4, 2) || '-' || substr($credit_date, 1, 2)
BETWEEN '$startDate' AND '$currentDate'

但你必须确保$startDate$currentDate也采用YYYY-MM-DD格式

© www.soinside.com 2019 - 2024. All rights reserved.