2015-06-18 33 views
0

我正在測試使用sybase ASE作爲數據庫的應用程序。在h2中實現sybase datepart

我們的代碼使用在Sybase日期部分的功能,例如是這樣的:

select datepart(month, getdate()); 

我試圖執行此使用用戶定義函數(http://www.h2database.com/html/features.html#user_defined_functions)所示:

public class SybaseSupport { 
    public static String datePart(String input1, String input2) { 
     return ""; 
    } 
} 

CREATE ALIAS DATEPART FOR "no.di.util.SybaseSupport.datePart"; 

但問題在於datepart的第一個參數只是簡單的單詞month,沒有任何形式的引用,所以H2認爲我試圖訪問某種列。

是否有可能在H2中以某種方式使用用戶定義的函數來實現它,還是需要修補H2本身?

+1

如果你使用'datepart('month',getdate())'那麼沒有問題。如果你使用'datapart(month,getdate())',那麼你需要改變H2本身,因爲'month'不是一個列。改變將使'datepart'類似'extract'。 –

+0

不幸datepart('month',getdate())在sybase中無效,我會嘗試給H2寫一個補丁。 –

+0

根據[Sybase文檔](http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc01621.0510/doc/),或許它應該是'm' html/emc1297434461737.html) –

回答

1

當datepart()中的第一個參數出現(不帶引號)時,單詞'month'被識別爲有效的ASE語法(並且存在一系列相同的單詞和縮寫,並且它們同樣適用)。顯然,這是一個ASE特有的非ANSI構造,你不能指望有一個不同的數據庫表現相同的方式。你需要找出目標數據庫中的等效語法。