[英]Comparing java.sql.Timestamp and LocalDate using slick?
我有一個光滑的列是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並進行比較而忽略時間部分-這可能嗎?
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
但是,這不是推薦的方法。
如果要比較特定日期的時間戳。 一個hack會是
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
您也可以使用其他比較運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.