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