我有一个光滑的列是Rep [Option [Timestamp]]。我想通过filter方法将它与用户提供的java.util.LocalDate进行比较。我只对比较日期(ddMMyyyy)感兴趣,而不是时间:
val userSuppliedLocalDate: LocalDate = ...
usersTable.filter(_.modifiedDate === userSuppliedLocalDate).result // Doesn't compile
我考虑过将Rep [Timestamp](_.modifiedDate)转换为LocalDate,但不确定这是否可行(展开Rep类型?)
或者,将userSuppliedLocalDate转换为java.sql.Timestamp并进行比较,忽略时间部分 - 这可能吗?
答案 0 :(得分:2)
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
LocalDate
本身用作光滑表格列。这怎么可能?
This possible with slick column mapper.
在范围内隐含以下内容。
implicit val mapper = MappedColumnType.base[LocalDate, Timestamp](
_.toLocalDateTime().toLocalDate(),
Timestamp.valueOf)
现在您可以直接使用LocalDate
列
def birthday = column[LocalDate]("birthday")
现在你可以直接比较
def birthdaysBefore(localDate: LocalDate) =
query.filter(_.birthday < localDate).result
您也可以使用其他比较运算符。