Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何查询日期以12天结束的sqlite数据库?_Android_Android Sqlite_Android Room - Fatal编程技术网

Android 如何查询日期以12天结束的sqlite数据库?

Android 如何查询日期以12天结束的sqlite数据库?,android,android-sqlite,android-room,Android,Android Sqlite,Android Room,我有一个SQLiteDatabase查询问题。 我想向用户展示日期在12天内结束的东西。它看起来像: @查询从表中选择ID、名称、产品、金额、日期,其中日期不为空,日期不为问题的日期 我将只添加我存储为字符串的数据 您使用的日期格式似乎不可直接排序或使用大于/小于类型表达式进行比较。尤其是不能直接与“现在”日期进行比较 e、 g.18-06大于01-07,因为当天优先级较高1大于0 此外,日期“现在”和“12天”将在2021年7月1日返回/决定2021年7月13日,所以18-??任何月份的日期都

我有一个SQLiteDatabase查询问题。 我想向用户展示日期在12天内结束的东西。它看起来像: @查询从表中选择ID、名称、产品、金额、日期,其中日期不为空,日期不为问题的日期

我将只添加我存储为字符串的数据

您使用的日期格式似乎不可直接排序或使用大于/小于类型表达式进行比较。尤其是不能直接与“现在”日期进行比较

e、 g.18-06大于01-07,因为当天优先级较高1大于0

此外,日期“现在”和“12天”将在2021年7月1日返回/决定2021年7月13日,所以18-??任何月份的日期都只能小于或等于1799-12-31的日期。由于任何数字字符0。。。。9大于-

修复1以更友好的格式存储数据

一种解决方案是以YYYY-MM-DD格式存储数据。然后,您的比较将起作用,日期和时间函数也将起作用,例如下面使用的strftime和您使用的date

有关日期/时间格式和内置函数,请参见末尾的链接 如果使用此格式的日期,则可以使用您的查询:-

@Query("SELECT ID, NAME_PRODUCT, AMOUNT, DATE_EXP FROM Table WHERE date_exp not null AND date_exp <= DATE('now', '+12 days') ORDER BY date_exp ASC")
本机SQLite中的工作示例/演示

以下SQL语句:-

DROP TABLE IF EXISTS `table`;
CREATE TABLE IF NOT EXISTS `table` (id INTEGER PRIMARY KEY, name_product TEXT, amount REAL, date_exp TEXT, other_date_exp TEXT);
INSERT INTO `table` VALUES
    (null,'blah',25.12,'18-06','2021-06-18') /* XXX Should not be in result */
    ,(null,'blah',25.12,'18-06','2022-06-18') /* XXX Should not be in result */
    ,(null,'blah',25.12,'18-05','2021-05-18') /* Should be in result */
    ,(null,'blah',25.12,null,null) /* XXX Should not be in result */
    ,(null,'blah',25.12,'19-05','2021-05-19') /* Should be in result */
    ,(null,'blah',25.12,'20-05','2021-05-20') /* Should be in result */
;

SELECT ID, NAME_PRODUCT, AMOUNT, DATE_EXP FROM `Table` WHERE date_exp not null AND date_exp <= DATE('now', '+12 days') ORDER BY date_exp ASC;
SELECT ID, NAME_PRODUCT, AMOUNT, other_date_exp FROM `Table` WHERE other_date_exp not null AND other_date_exp <= DATE('now', '+12 days') ORDER BY other_date_exp ASC;
SELECT ID, NAME_PRODUCT, AMOUNT, DATE_EXP FROM `Table` WHERE date_exp not null AND substr(date_exp,4,2)||'-'||substr(date_exp,1,2) <= substr(date('now','+12 days'),6,5) ORDER BY substr(date_exp,4,2)||'-'||substr(date_exp,1,2) ASC;
DROP TABLE IF EXISTS `table`;
删除并创建文本表note Room中包含的名称,例如``中的表和列。命名为table的表将导致语法错误,因为它是一个关键字 插入用于测试的行 运行您的原始选择 首先运行两个解决方案 清洁环境 第一个查询将显示您的体验:-

第二个和第三个查询会产生您所期望的结果,尽管是第二个查询,其中包含使用SQLite可以处理的建议格式的附加列:-

你可以参考

使用Navicat对SQLite进行测试。
DROP TABLE IF EXISTS `table`;
CREATE TABLE IF NOT EXISTS `table` (id INTEGER PRIMARY KEY, name_product TEXT, amount REAL, date_exp TEXT, other_date_exp TEXT);
INSERT INTO `table` VALUES
    (null,'blah',25.12,'18-06','2021-06-18') /* XXX Should not be in result */
    ,(null,'blah',25.12,'18-06','2022-06-18') /* XXX Should not be in result */
    ,(null,'blah',25.12,'18-05','2021-05-18') /* Should be in result */
    ,(null,'blah',25.12,null,null) /* XXX Should not be in result */
    ,(null,'blah',25.12,'19-05','2021-05-19') /* Should be in result */
    ,(null,'blah',25.12,'20-05','2021-05-20') /* Should be in result */
;

SELECT ID, NAME_PRODUCT, AMOUNT, DATE_EXP FROM `Table` WHERE date_exp not null AND date_exp <= DATE('now', '+12 days') ORDER BY date_exp ASC;
SELECT ID, NAME_PRODUCT, AMOUNT, other_date_exp FROM `Table` WHERE other_date_exp not null AND other_date_exp <= DATE('now', '+12 days') ORDER BY other_date_exp ASC;
SELECT ID, NAME_PRODUCT, AMOUNT, DATE_EXP FROM `Table` WHERE date_exp not null AND substr(date_exp,4,2)||'-'||substr(date_exp,1,2) <= substr(date('now','+12 days'),6,5) ORDER BY substr(date_exp,4,2)||'-'||substr(date_exp,1,2) ASC;
DROP TABLE IF EXISTS `table`;