5

在我的项目中,我使用 Postgres 数据库,但有时,为了开发,我使用 H2。我正在尝试定义一个 sql 脚本,它将更新时间戳列,如下所述,但我找不到可以同时应用于 Postgres 和 H2 的单一格式。

基本上,sql 试图将时间戳设置为NOW + 1 week.

这是适用于 Postgres 的 sql:

update mytable set mytime = CURRENT_TIMESTAMP + INTERVAL '7 days';

这是适用于 H2 的 sql:

update mytable set mytime = CURRENT_TIMESTAMP + 7;

有人可以建议一个可以对两个数据库执行相同操作的 sql 吗?

4

2 回答 2

5

根据我的测试,这适用于 H2 和 PostgreSQL:

update mytable set mytime = 
cast(cast(current_timestamp as date) + 7 as timestamp) + 
cast(current_timestamp as time);

我同意这有点奇怪,但这是我在当前版本的 H2 和 PostgreSQL 中发现的唯一方法。

于 2013-03-06T20:29:58.560 回答
1

我们遇到了类似的问题,我们将 PostgreSQL 用于我们的应用程序,但我们的单元测试使用 H2。我们最终只是将日期算术移动到应用程序代码中。因此,使用上面的示例,将 sql 更改为

update mytable set mytime = ?;

然后在应用程序代码中(使用 Java)我们计算出时间:

Instant future1Week = Instant.now().plus(1, ChronoUnit.WEEKS);

并将该值绑定在 PreparedStatement 中。

于 2018-12-04T22:27:59.063 回答