【问题标题】:DATE_SUB and DATE_ADD in H2 for MySQLMySQL H2 中的 DATE_SUB 和 DATE_ADD
【发布时间】:2016-09-15 05:13:29
【问题描述】:

我使用 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 的情况下完成这项工作或更改查询?

【问题讨论】:

  • 我放弃了尝试使用 H2 进行测试,因为两种 SQL 风格之间的差异太麻烦了。

标签: mysql scala h2


【解决方案1】:

最后我能够解决它。我不得不将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'

【讨论】:

  • 我不确定TIMESTAMPDIFF 是否是您想要的,因为它应该获取两个时间戳之间的差异,而不是从日期中减去时间间隔(请参阅:h2database.com/html/functions.html
  • 但是 TIMESTAMPDIFF 和 TIMESTAMPADD 对 h2 和 MySQL 都有效吗?
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2013-03-16
  • 2021-05-21
  • 1970-01-01
  • 2011-10-14
  • 2012-04-27
相关资源
最近更新 更多