如何在 jOOQ 中基于另一个时间列更新一个时间列
How to update one time column based on another in jOOQ
让我们假设一个超级简单的用例:
想象一下,我有一个包含这些列的 table (dummyTable):
id
dueAt
createdAt
如何使用 jOOQ 执行如下所示的批量更新
update dummyTable
set dueAt = TIMESTAMPADD(MINUTE, 5, createdAt)
where ids in (...)
我在网上看到使用硬编码和提供的值的示例 -
https://www.jooq.org/doc/3.13/manual/sql-building/column-expressions/datetime-functions/timestampadd-function/。但我无法弄清楚如何让 TIMESTAMPADD 函数与现有列值一起使用。
空白处应该填写什么?
return rwContext
.update(DUMMYTABLE)
.set(DUMMYTABLE.DUEAT, ______________ )
.where(DUMMYTABLE.ID.in(someIds))
.execute();
我在空白处尝试了以下代码,但出现编译错误
timestampAdd(Timestamp.valueOf(DUMMYTABLE.CREATEDAT), 5, DatePart.MINUTE)
感谢任何帮助或指导。
Timestamp.valueOf(String)
是 JDBC API 从字符串文字创建一个 Timestamp
值,例如
Timestamp.valueOf("2000-01-01 00:00:00.0");
您不能将 jOOQ Field<Timestamp>
传递给它。但你为什么要这样做?直接将字段引用传递给函数即可:
timestampAdd(DUMMYTABLE.CREATEDAT, 5, DatePart.MINUTE);
或者,如果使用 JSR 310 类型,DSL.localDateTimeAdd()
:
localDateTimeAdd(DUMMYTABLE.CREATEDAT, 5, DatePart.MINUTE);
让我们假设一个超级简单的用例: 想象一下,我有一个包含这些列的 table (dummyTable):
id
dueAt
createdAt
如何使用 jOOQ 执行如下所示的批量更新
update dummyTable
set dueAt = TIMESTAMPADD(MINUTE, 5, createdAt)
where ids in (...)
我在网上看到使用硬编码和提供的值的示例 - https://www.jooq.org/doc/3.13/manual/sql-building/column-expressions/datetime-functions/timestampadd-function/。但我无法弄清楚如何让 TIMESTAMPADD 函数与现有列值一起使用。
空白处应该填写什么?
return rwContext
.update(DUMMYTABLE)
.set(DUMMYTABLE.DUEAT, ______________ )
.where(DUMMYTABLE.ID.in(someIds))
.execute();
我在空白处尝试了以下代码,但出现编译错误
timestampAdd(Timestamp.valueOf(DUMMYTABLE.CREATEDAT), 5, DatePart.MINUTE)
感谢任何帮助或指导。
Timestamp.valueOf(String)
是 JDBC API 从字符串文字创建一个 Timestamp
值,例如
Timestamp.valueOf("2000-01-01 00:00:00.0");
您不能将 jOOQ Field<Timestamp>
传递给它。但你为什么要这样做?直接将字段引用传递给函数即可:
timestampAdd(DUMMYTABLE.CREATEDAT, 5, DatePart.MINUTE);
或者,如果使用 JSR 310 类型,DSL.localDateTimeAdd()
:
localDateTimeAdd(DUMMYTABLE.CREATEDAT, 5, DatePart.MINUTE);