【发布时间】:2011-09-02 10:27:36
【问题描述】:
我正在尝试构建 SQL 查询,应该按原样执行 在 HSQL (v2.2.4) 和 MySQL (v5.1.36) 服务器上都可以(如果它也可以在 DB2 v9 上运行,那就太好了!)
查询是:
select count(*) from document where current_date - cast(indexing_date as date) <= ?
(这里current_date是一个标准的HSQL/MySQL函数,indexing_date是一个类型为datetime的列,参数?被替换为整数20是天数)。
问题是 MySQL 返回日期之间的差异 as between numbers 而 HSQL 返回天的差异(当您从日期中减去日期时这是合乎逻辑的)。
HSQL 也支持这种语法(但 MySQL 不支持):
select count(*) from document where cast(indexing_date as date) between current_date - 20 day and current_date
而 MySQL 没有。我知道 MySQL 中的 DATEDIFF(),但正如我所说,该解决方案应该是可互操作的。
【问题讨论】:
-
MySQL 还支持:
current_date - INTERVAL 20 day -
我觉得不可能,hsqldb的语法和mysql差太多了。
-
@ypercube:不适用于 HSQLDB:
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: INTERVAL。 -
@ajreal:也许 HSQL 与 SQL'92 更兼容? MySQL 支持许多不错的扩展,但它们是非标准的。
-
是的。我对hsqldb没有经验,但我只是看了一下datediff函数,与MySQL datediff有很大不同。您极不可能为这两个数据库构建通用 SQL。我认为如果你能够为每个数据库拆分成两种 SQL 格式会更省事。