2016-10-30 44 views
1

我有一個嵌入式HSQLDB數據庫進行測試。生產數據庫是SQL Server 2012的HSQL和MSSQL datepart參數

我使用這對這個地方謂詞本機查詢:

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的全局變量,它代表「分鐘」的值。

謝謝!

回答

0

您可以使用:

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。

+0

謝謝您的回覆。我知道我可以用'分鐘',也許我不清楚這一點。我想知道是否可以在HSQLDB中定義一些「分鐘」的全局變量。順便說一句,在這種情況下,根據w3schools,這不是一個MSSQL兼容性,而是一個標準的SQL兼容性問題。 – Andre

+0

會話變量可以作爲過程的輸入/輸出來定義和訪問,但不能從單個查詢中訪問。 – fredt

+0

timestampadd函數在mssql中不存在,或者至少這是我得到的結果。所以我想我的問題還沒有答案。或者答案是:不可能。 – Andre