簡體   English   中英

如何在jooq中僅按日期(沒有時間)進行比較?

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

您必須為TimestampLocalDate之間的轉換提供自己的轉換器。

檢查來自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 ,並使用localdateLocalTime.MIDNIGHT轉換為timestamp 這可能有點危險,如果應該使用另一個特定的 zoneId 來讓您的系統按預期工作,則應該向您進行調查。

然后您可以將其用作

.where(MY_TABLE.UPDATED_AT.asConvertedDataType(new LocalDateConverter()).eq(cashDate))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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