【问题标题】:How to update one time column based on another in jOOQ如何在 jOOQ 中基于另一个时间列更新一个时间列
【发布时间】:2020-08-05 00:27:39
【问题描述】:

让我们假设一个超级简单的用例: 想象一下,我有一个包含这些列的表 (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)

感谢任何帮助或指导。

【问题讨论】:

  • 尝试在带有 SQLDataType.TIMESTAMP 的 CREATEDAT 上使用 cast 方法。

标签: java jooq


【解决方案1】:

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);

【讨论】:

  • 感谢您的回复。这实际上是我开始的地方,但以编译错误结束,没有找到适合 timestampAdd(org.jooq.TableField,int,org.jooq.日期部分)。我错过了一些基本的东西吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 2015-05-02
  • 2020-05-07
  • 2020-06-21
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多