代码之家  ›  专栏  ›  技术社区  ›  Rory

比较java。sql。使用slick的时间戳和本地日期?

  •  2
  • Rory  · 技术社区  · 8 年前

    我有一个光滑的列,它是一个Rep[选项[时间戳]]。我想将其与用户提供的java进行比较。util。LocalDate。我只想比较日期(ddMMyyyy),而不是时间:

    val userSuppliedLocalDate: LocalDate = ...
    usersTable.filter(_.modifiedDate === userSuppliedLocalDate).result // Doesn't compile
    

    我考虑过将Rep[Timestamp](_u.modifiedDate)转换为LocalDate,但不确定这是否可行(展开Rep类型?)

    1 回复  |  直到 8 年前
        1
  •  4
  •   Nagarjuna Pamu    8 年前

    不推荐的方式

     Warning: Take care of time zone information
    

    您可以转换 LocalDate 并比较时间戳。

    val timestamp = Timestamp.valueOf(localDate.atStartOfDay)
    

    你的方法变成

    val userSuppliedLocalDate: LocalDate = ...
    val userSuppliedTimestamp = Timestamp.valueOf(localDate.atStartOfDay)
    usersTable.filter(_.modifiedDate === userSuppliedTimestamp).result
    

    如果您想比较特定日期的时间戳。一个黑客就是

    val start = Timestamp.valueOf(localDate.atStartOfDay())
    val end = Timestamp.valueOf(start.plusDays(1))
    
    usersTable.filter(row => row.modifiedDate >= start && row.modifiedDate < end).result
    

    本地日期 它本身就像光滑的桌子柱子。

    这怎么可能?

    This possible with slick column mapper.
    

    范围中包含以下隐含内容。

    implicit val mapper = MappedColumnType.base[LocalDate, Timestamp](
     _.toLocalDateTime().toLocalDate(),
     Timestamp.valueOf)
    

    本地日期 直接列

    def birthday = column[LocalDate]("birthday")
    

    现在你可以直接比较

    def birthdaysBefore(localDate: LocalDate) = 
      query.filter(_.birthday < localDate).result
    

    也可以使用其他比较运算符。