HSQL and MSSQL datepart parameter



我有一个用于测试的嵌入式HSQLDB数据库。生产数据库为SQL Server 2012。

我正在使用一个本机查询,它在哪里有这个谓词:

and (pc.SOME_DATE IS NOT NULL 
AND pc.SOME_DATE BETWEEN SYSDATETIME() AND DATEADD(minute, c.MINUTES_TO_ADD, SYSDATETIME()))

在SQLServer上运行正常,但在HSQLDB上失败:

org.hsqldb.HsqlException: user lacks privilege or object not found: MINUTE

我通过创建一个函数解决了SYSDATETIME的类似问题,但我不知道如何解决使用关键字的mssql和使用varchar的hsqldb之间的这种不兼容性。

有什么想法,我可以做我的hsqldb使这个工作吗?甚至对查询…

编辑:我知道如何使查询在HSQLDB中工作,关键是在SQLServer和HSQLDB中具有相同的查询。我可以定义一个全局变量叫minute来表示值'minute'吗?

谢谢!

您可以使用:

DATEADD('minute', c.MINUTES_TO_ADD, SYSDATETIME())

同样的任务还有其他函数:

TIMESTAMPADD ( SQL_TSI_MINUTE, c.MINUTES_TO_ADD, SYSDATETIME() )

SQLServer的兼容性可能会在HSQLDB的下一个版本中得到改进,以支持不做任何更改的查询。

更新:增加了对DATEADD和DATEDIFF函数的无引号令牌的支持,并提交到SVN/base/trunk。在签出SVN目录后,可以很容易地用Gradle或Ant编译jar。

最新更新