通过字符串在SQLite DB中搜索DateType-Android

时间:2018-10-16 08:29:39

标签: android database sqlite

我目前在现有的Android项目中使用SQLite数据库。

在EditText字段中,我可以搜索项目的不同属性,例如颜色,标题或金额。因此,对于每个键入的字母,搜索建议都会更新。在我的项目实体中,我有不同的属性,这里是一个简单的示例:

 Item:
 * String: color
 * String: title
 * int: price
 * Date: date
 * int: id

因此,在搜索字段中,我想注意所有这些属性。这适用于我的String-以及我的int-Attributes,但是我无法设法过滤Date-数据类型。

如果我在TextEditField中键入“ 18”,我想获取2018年的所有商品,1974年3月18日的所有商品,标题为“ sql查询的18 Tipps”的所有商品以及价格从18,00到18,99-当然是每xx,18。

我当前在ItemDao中的查询

@Query("SELECT * FROM items WHERE (LOWER(color) LIKE :searchtext OR LOWER(title) LIKE :searchtext OR price LIKE :searchtext) ORDER BY date DESC")
public abstract List<ItemEntity> searchItems(String searchtext);

如何确定我还可以搜索日期类型? 我尝试加入strftime('%Y-%m-%d',date) LIKE :searchtext

1 个答案:

答案 0 :(得分:0)

为了解决我的问题,我在查询中添加了另一行以搜索日期:

OR LOWER(strftime('%d.%m.%Y', datetime(date/1000, 'unixepoch', '+1 day'))) LIKE :searchtext

在深入研究我的数据库后,我看到该日期被保存为包含以毫秒为单位的时间分量的时间戳,因此有必要将初始时间戳除以1000。之后,我在UNIX Epoche中有了一个时间戳。格式,这就是为什么我将其定义为“ unixepoche”。 由于%d配置从零开始,所以最后一个属性将1天添加到加载日期。因此,19年1月1日(不含“ +1天”)将转换为00.01.2019。