【问题标题】:how can i get today in Room database queries我如何在 Room 数据库查询中获得今天
【发布时间】:2020-11-25 10:18:11
【问题描述】:

您好,我有一个查询,我根据 product_end_date 订购产品列表。我只想获取结束日期大于或等于今天的产品列表,我该如何在 Room 中做到这一点

这是我的查询

@Query("SELECT * FROM product_data_table ORDER BY product_end_date ASC")
    fun getAllProductsOrderByEndDate(): LiveData<List<Product>>

我试过了,但是没有用

   @Query("SELECT * FROM product_data_table WHERE product_end_date >= date('now') ORDER BY product_end_date ASC")
        fun getAllProductsOrderByEndDate(): LiveData<List<Product>>

实体

@Entity(tableName = "product_data_table")
data class Product(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "product_id")
    var id: Int,
    @ColumnInfo(name = "product_name")
    var name: String,
    @ColumnInfo(name = "product_catagory")
    var catagory: String,
    @ColumnInfo(name = "product_end_date")
    var end_date: Date
)

我不确定如何在 where 子句中使用 todays date

请建议如何解决这个问题

非常感谢您的帮助

谢谢 回复

【问题讨论】:

  • 如果你也为 Date 类添加你的Converter 会很好
  • @i30mb1 我不使用任何转换器类
  • 那么end_date是如何从对象转化为列的呢?
  • 你认为 date('now') 应该如何工作?对于房间查询来说,这没什么。您无法比较查询中的日期。您应该在存储库或视图模型或用于接收数据的任何内容中进行一些检查。
  • @Viktor OK 会这样做

标签: android sql kotlin android-room


【解决方案1】:

在 Unix 时将 Entity 类中的 end_date 存储为 Long

@Entity(tableName = "product_data_table")
data class Product(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "product_id")
    var id: Int,
    @ColumnInfo(name = "product_name")
    var name: String,
    @ColumnInfo(name = "product_catagory")
    var catagory: String,
    @ColumnInfo(name = "product_end_date")
    var end_date: Long // Changed the type from Date to Long
)

在插入产品时通过Date().timeend_date

现在查询时,获取今天的 Unix 时间并将其作为参数传递给查询函数。像这样的:

@Query("SELECT * FROM product_data_table WHERE product_end_date >= :endDate")
fun getAllProductsOrderByEndDate(endDate: Long): List<Product>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多