我有一个SQlite数据库,其中存储了一些带有日期的数据。
现在我想明智地获取数据日期:
按月进行-表示我将“当前日期为EndDate”的值传递给该月的第1个日期。
每年一次-这意味着我想获取20日至4月31日的预览。当前
明智地选择开始日期和结束日期-知道我是哪个日期。
为此,我得到了一个解决方案是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"
在此查询中将返回数据。 但是它会返回所有数据,而不会进行任何过滤。
如果有人知道为什么这样的工作,请帮助我。
我的数据列表
谢谢。
明智的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.' }
...
答案 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