簡體   English   中英

比較使用光滑的java.sql.Timestamp和LocalDate?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM