如何以兼容的方式定义日期间隔?

时间:2011-09-02 10:27:36

标签: mysql sql db2 hsqldb

我正在尝试构建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(),但正如我所说,解决方案应该可以互操作。

2 个答案:

答案 0 :(得分:2)

HSQLDB也支持这个:

select count(*) from document where current_date - cast(indexing_date as date) <= cast(? as interval day)

select count(*) from document where cast(indexing_date as date) between current_date - '20' day and current_date

select count(*) from document where indexing_date >= current_date - interval '20' day

此外,从版本2.2.6开始,HSQLDB支持DATEDIFF(datevaluea, datevalueb),它返回两个日期之间的天数,以及DAYS(datevalue),它返回自纪元以来的日期编号。

答案 1 :(得分:0)

DB2:

SELECT COUNT(*) 
FROM document 
WHERE DATE(indexing_date) BETWEEN DATE(DAYS(CURRENT DATE) - 20) AND CURRENT DATE