【发布时间】:2015-05-18 07:42:08
【问题描述】:
我正在尝试使用 H2 数据库 (v1.4.185) 比较 jOOQ (v3.5.0) 中的日期,但如果比较太大,我会得到“数值超出范围”。
比如下面这张表
CREATE TABLE example (
id INT AUTO_INCREMENT,
deadline TIMESTAMP,
PRIMARY KEY (id)
);
并使用以下示例代码(未显示 jOOQ 的代码生成步骤)
DSLContext dsl = DSL.using(getDataSource(dbUrl), SQLDialect.H2);
ExampleRecord exampleRecord = dsl.newRecord(EXAMPLE);
exampleRecord.setDeadline(Timestamp.valueOf("2001-01-10 12:15:30"));
exampleRecord.store();
dsl.selectFrom(EXAMPLE)
.where(EXAMPLE.DEADLINE.sub(
DayToSecond.valueOf(Duration.ofDays(30).toMillis()))
.le(currentTimestamp()))
.fetch().forEach(record -> System.out.println(record.getDeadline()));
产生以下错误
Exception in thread "main" org.jooq.exception.DataAccessException:
SQL [select "EXAMPLE"."ID", "EXAMPLE"."DEADLINE" from "EXAMPLE"
where dateadd('ms', cast(? as bigint), "EXAMPLE"."DEADLINE")
<= current_timestamp()];
Numeric value out of range: "-2592000000";
SQL statement:
select "EXAMPLE"."ID", "EXAMPLE"."DEADLINE" from "EXAMPLE"
where dateadd('ms', cast(? as bigint), "EXAMPLE"."DEADLINE")
<= current_timestamp() [22003-185]
【问题讨论】: