[英]how to compare only by date (without time) in jooq?
我有類型為timestamp with time zone
的列。 該表包含以下值“2022-06-30 22:56:29.183764 +00:00”。 我想做一個僅限日期的搜索。
如何在jooq中僅按日期(沒有時間)進行比較?
我試過這個,但它不起作用。
.where(MY_TABLE.UPDATED_AT.cast(LocalDate::class.java).eq(cashDate))
其中cashDate = "2022-06-30"
您必須為Timestamp
和LocalDate
之間的轉換提供自己的轉換器。
檢查來自jooq
的類似示例。
在你的情況下,它會是
import java.sql.Timestamp;
import java.time.LocalDate;
import org.jooq.Converter;
public class LocalDateConverter implements Converter<Timestamp, LocalDate> {
@Override
public LocalDate from(Timestamp t) {
return t == null ? null : t.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
@Override
public Timestamp to(LocalDate u) {
return u == null ? null : Timestamp.valueOf(u.atTime(LocalTime.MIDNIGHT));
}
@Override
public Class<Timestamp> fromType() {
return Timestamp.class;
}
@Override
public Class<LocalDate> toType() {
return LocalDate.class;
}
}
在上面的示例中,我使用ZoneId.systemDefault()
將timestamp
轉換為localdate
,並使用localdate
將LocalTime.MIDNIGHT
轉換為timestamp
。 這可能有點危險,如果應該使用另一個特定的 zoneId 來讓您的系統按預期工作,則應該向您進行調查。
然后您可以將其用作
.where(MY_TABLE.UPDATED_AT.asConvertedDataType(new LocalDateConverter()).eq(cashDate))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.