我有一个SQlite数据库,我用日期存储一些数据。
现在我希望获得数据日期明智:
为此我得到一个解决方案是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
)
对于月份数据,我将尝试以下查询:
"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'*/
在此查询中,数据将返回。但它返回所有数据而没有任何过滤。
如果有人知道为什么这样的工作请帮助我。
我的数据清单
提前致谢。
明智的解决方案
我只是将日期格式"dd/mm/yyyy"
更改为"yyyy/mm/dd"
并重新插入所有数据。
和QUERY下的火灾:
"SELECT * FROM $customerDetail WHERE $credit_date BETWEEN '$startDate' AND '$currentDate'"
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
格式