从SQLITE数据库Kotlin中检索按日期排列的数据

时间:2019-02-23 06:10:43

标签: sqlite kotlin

我有一个SQlite数据库,其中存储了一些带有日期的数据。

现在我想明智地获取数据日期:

  1. 按月进行-表示我将“当前日期为EndDate”的值传递给该月的第1个日期。

  2. 每年一次-这意味着我想获取20日至4月31日的预览。当前

  3. 明智地选择开始日期和结束日期-知道我是哪个日期。

为此,我得到了一个解决方案是Java的HERE

但是我不知道这是如何工作的。任何人都请向我解释如何工作以及如何获取数据(如上所述)。对于科特琳

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"

在此查询中将返回数据。 但是它会返回所有数据,而不会进行任何过滤。

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

我的数据列表

enter image description here

谢谢。

解决方案:

明智的MONTH解决方案

我只是将日期格式 "yyyy/mm/dd" 更改为 "SELECT * FROM $customerDetail WHERE $credit_date BETWEEN '$startDate' AND '$currentDate'" ,然后重新插入所有数据。

并在“ QUERY”下射击:

if @order.update(order_status)
  if @order.order_status_previously_changed?
    format.html { redirect_to @order, notice: 'Order was successfully cancelled.' }
    ...

1 个答案:

答案 0 :(得分: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