DATE_SUB 和 DATE_ADD 在 H2 中 MySQL

DATE_SUB and DATE_ADD in H2 for MySQL

我使用 MySQL 作为我的数据库和 H2 进行测试。我也在使用 playframework 2.3.x 和 Scala,但我认为对于问题的目的并不重要。

H2 与我在查询中使用的一些函数有冲突

SELECT *
FROM subscriptions
WHERE active_until >= (DATE_SUB(CURDATE(), INTERVAL 3 DAY))
AND active_until <= (DATE_ADD(CURDATE(), INTERVAL 1 DAY))
AND status = "ACTIVE"

导致问题的函数是DATE_SUB和DATE_ADD。

是否有解决方法可以让我完成这项工作或更改查询而不破坏它 mysql?

终于解决了。我不得不将 DATE_ADD 更改为 TIMESTAMPADD,将 DATE_SUB 更改为 TIMESTAMPDIFF。然后我把CURDATE()改成了CURRENT_DATE。方法的符号也发生了变化,但对 H2 和 My 都有效。

SELECT *
FROM subscriptions
WHERE active_until >= (TIMESTAMPDIFF(DAY, 3, CURRENT_DATE))
AND active_until <= (TIMESTAMPADD(DAY, 1, CURRENT_DATE))
AND status LIKE 'ACTIVE'

这是我的例子。 TIME_TO_BEGIN 是 TIMESTAMP 类型。 “DATEADD”函数名和参数如“MONTH”应全部大写。

CREATE TABLE BLOCKED_BIN_RANGE (
  BLOCKED_BIN_RANGE_ID BIGINT not null,
  TIME_TO_BEGIN TIMESTAMP not null,
  USER_NAME VARCHAR(30)  not null 
);

Insert into BLOCKED_BIN_RANGE (BLOCKED_BIN_RANGE_ID,TIME_TO_BEGIN, USER_NAME)
        values (304, DATEADD('MONTH', 1, CURRENT_TIMESTAMP), 'BILL');