HSQL和MSSQL datepart参数

时间:2016-10-30 12:09:51

标签: sql-server database hsqldb

我有一个用于测试的嵌入式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'。

谢谢!

1 个答案:

答案 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。