在h2

时间:2015-06-18 16:44:19

标签: unit-testing sybase h2

我正在测试使用sybase ASE作为其数据库的应用程序。

我们的代码使用sybase中的datepart函数,例如:

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本身?

2 个答案:

答案 0 :(得分:2)

您可以使用MONTH(getdate())。 这将同时在H2和SQLServer上运行。

答案 1 :(得分:1)

单词'month',当发生(没有引号)作为datepart()中的第一个参数时,被识别为有效的ASE语法(并且有一系列类似的单词和缩写,它们保持相同)。显然,这是一个特定于ASE的非ANSI构造,您不能指望不同的数据库行为方式相同。您需要在目标数据库中找出等效的语法。