我有一个用于测试的嵌入式HSQLDB数据库。生产数据库是SQL Server 2012。
我正在使用一个原生查询,该查询在where:
上有这个谓词SELECT Doc_ID,
Sum(CASE WHEN year(date_discharge)=1996 THEN 1 ELSE 0 END) as [Successful 1996],
Sum(CASE WHEN year(date_discharge)=1997 THEN 1 ELSE 0 END) as [Successful 1997],
Sum(CASE WHEN year(date_discharge)=1998 THEN 1 ELSE 0 END) as [Successful 1998]
-- And so forth
FROM Admission a, Adm_Med am
WHERE a.Adm_ID=am.Adm_ID
AND Health_ID=20
GROUP BY Doc_ID
并且在SQLServer中它运行正常,但在HSQLDB上它失败了:
and (pc.SOME_DATE IS NOT NULL
AND pc.SOME_DATE BETWEEN SYSDATETIME() AND DATEADD(minute, c.MINUTES_TO_ADD, SYSDATETIME()))
我通过创建函数解决了SYSDATETIME的类似问题,但我不知道如何使用关键字解决mssql和使用varchar的hsqldb之间的这种不兼容性。
关于我可以对我的hsqldb做些什么来实现这项工作的想法?甚至是查询...
编辑: 我知道如何使查询在HSQLDB中工作,关键是在SQLServer和HSQLDB中具有相同的查询。我可以定义一个名为minute的全局变量来表示值' minute'。
谢谢!
答案 0 :(得分:0)
您可以使用:
DATEADD('minute', c.MINUTES_TO_ADD, SYSDATETIME())
同一任务还有其他功能:
TIMESTAMPADD ( SQL_TSI_MINUTE, c.MINUTES_TO_ADD, SYSDATETIME() )
在下一版本的HSQLDB中可能会改进SQLServer兼容性,以支持查询而不做任何更改。
已更新:已添加对DATEADD和DATEDIFF函数的未加引号标记的支持,并已将其提交到SVN / base / trunk。在签出此SVN目录后,可以使用Gradle或Ant轻松编译jar。