Scala 使用slick比较java.sql.Timestamp和LocalDate?
我有一个光滑的列,它是一个Rep[选项[时间戳]]。我想通过filter方法将其与用户提供的java.util.LocalDate进行比较。我只想比较日期(ddMMyyyy),而不是时间:Scala 使用slick比较java.sql.Timestamp和LocalDate?,scala,slick,slick-3.0,Scala,Slick,Slick 3.0,我有一个光滑的列,它是一个Rep[选项[时间戳]]。我想通过filter方法将其与用户提供的java.util.LocalDate进行比较。我只想比较日期(ddMMyyyy),而不是时间: val userSuppliedLocalDate: LocalDate = ... usersTable.filter(_.modifiedDate === userSuppliedLocalDate).result // Doesn't compile 我考虑过将Rep[Timestamp](uu.mo
val userSuppliedLocalDate: LocalDate = ...
usersTable.filter(_.modifiedDate === userSuppliedLocalDate).result // Doesn't compile
我考虑过将Rep[Timestamp](uu.modifiedDate)转换为LocalDate,但不确定这是否可行(展开Rep类型?)
或者,将userSuppliedLocalDate转换为java.sql.Timestamp并忽略时间部分进行比较-这可能吗?不推荐使用这种方法
您可以将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
在范围中包含以下隐含内容
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
def birthdaysBefore(localDate:localDate)=
query.filter(u.birth
您也可以使用其他比较运算符。对于“不推荐的方式”,我想忽略时间,这可能吗?(我只想比较一下日期)谢谢,那么uu.modifiedDate呢?我们是否也需要将其更改为AtStarToDay(否则时间可能会不同?)。虽然我不确定是否可以通过过滤器修改它function@Rory补充了更多的答案。请查收
def birthday = column[LocalDate]("birthday")
def birthdaysBefore(localDate: LocalDate) =
query.filter(_.birthday < localDate).result