我正在测试使用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本身?
答案 0 :(得分:2)
您可以使用MONTH(getdate())
。
这将同时在H2和SQLServer上运行。
答案 1 :(得分:1)
单词'month',当发生(没有引号)作为datepart()中的第一个参数时,被识别为有效的ASE语法(并且有一系列类似的单词和缩写,它们保持相同)。显然,这是一个特定于ASE的非ANSI构造,您不能指望不同的数据库行为方式相同。您需要在目标数据库中找出等效的语法。